Skip to content

Kotlinのイディオムを使ったAdvent of Codeのパズル

Advent of Codeは毎年12月に開催されるイベントで、12月1日から12月25日まで毎日、ホリデーがテーマのパズルが公開されます。 Advent of Codeの作成者であるEric Wastl氏の許可を得て、Kotlinらしい書き方でこれらのパズルを解く方法をご紹介します。

Advent of Codeの準備をしよう

KotlinでAdvent of Codeの課題を解決するために、すぐに始められる基本的なヒントを紹介します。

  • プロジェクトの作成にはこちらのGitHubテンプレートを使用する
  • KotlinデベロッパーアドボケイトのSebastian Aignerによるウェルカムビデオをチェックする。

Advent of Code 2022

Day 1: カロリー計算

Kotlin Advent of Codeテンプレートと、Kotlinの文字列やコレクションを扱うための便利な関数(例: maxOf()sumOf())について学びます。 拡張関数がどのようにソリューションをきれいに構造化するのに役立つかを見てみましょう。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 1 | Kotlin

Day 2: じゃんけん

KotlinのChar型に対する操作を理解し、Pair型とtoコンストラクタがパターンマッチングとどのようにうまく機能するかを確認します。 独自のオブジェクトをcompareTo()関数を使って順序付ける方法を理解します。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 2 | Kotlin

Day 3: リュックサック再編成

kotlinx.benchmarkライブラリがコードのパフォーマンス特性を理解するのにどのように役立つかを学びます。 また、intersectのような集合演算が、重複するデータを選択するのにどのように役立つか、そして同じソリューションの異なる実装間でのパフォーマンス比較を見てみましょう。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 3 | Kotlin

Day 4: キャンプの片付け

infix関数とoperator関数がコードをより表現豊かにし、String型とIntRange型に対する拡張関数が入力のパースをいかに簡単にするかを見てみましょう。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 4 | Kotlin

Day 5: 荷物スタック

ファクトリ関数を使ったより複雑なオブジェクトの構築、正規表現の使用方法、そして両端キューであるArrayDeque型について学びます。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 5 | Kotlin

Day 6: チューニングのトラブル

kotlinx.benchmarkライブラリを使った、より詳細なパフォーマンス調査を見てみましょう。同じソリューションの16種類の異なるバリエーションの特性を比較します。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 6 | Kotlin

Day 7: デバイスに空き容量なし

ツリー構造をモデル化する方法を学び、プログラムによるKotlinコード生成のデモを見てみましょう。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 7 | Kotlin

Day 8: ツリーハウス

sequenceビルダーの動作と、プログラムの最初の草案とKotlinらしいソリューションがいかに異なるかを見てみましょう(スペシャルゲスト:Roman Elizarov!)。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 8 | Kotlin

Day 9: ロープの橋

run関数、ラベル付きリターン、そしてcoerceInzipWithNextのような便利な標準ライブラリ関数を見てみましょう。 ListおよびMutableListコンストラクタを使って指定されたサイズのリストを構築する方法、そして問題文のKotlinベースの可視化を垣間見ることができます。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 9 | Kotlin

Day 10: 陰極線管

レンジとin演算子がいかにレンジのチェックを自然にするか、関数パラメータがどのようにレシーバーに変換されるか、そしてtailrec修飾子の簡単な探求について学びます。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 10 | Kotlin

Day 11: 真ん中の猿

可変で命令的なコードから、不変および読み取り専用のデータ構造を活用するより関数的なアプローチへ移行する方法を見てみましょう。 コンテキストレシーバーについて学び、私たちのゲストがAdvent of Codeのためだけに独自の可視化ライブラリを構築した方法について学びます。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 11 | Kotlin

Day 12: 丘登りアルゴリズム

キュー、ArrayDeque、関数参照、およびtailrec修飾子を使用して、Kotlinで経路探索問題を解決します。

  • Advent of Codeでパズルの説明を読む
  • ビデオでソリューションをチェックする。

YouTube Advent of Code 2022 Day 12 | Kotlin

Advent of Code 2021

Day 1: ソナースイープ

windowed関数とcount関数を適用して、整数のペアとトリプレットを扱います。

  • Advent of Codeでパズルの説明を読む
  • Anton ArhipovによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Advent of Code 2021 in Kotlin, Day 1: Sonar Sweep

Day 2: 潜水!

分割宣言とwhen式について学びます。

  • Advent of Codeでパズルの説明を読む
  • Pasha FinkelshteynによるソリューションをGitHubで確認するか、ビデオを見る。

YouTube Advent of Code 2021 in Kotlin, Day 2: Dive!

Day 3: バイナリ診断

バイナリ数を扱うさまざまな方法を探ります。

  • Advent of Codeでパズルの説明を読む
  • Sebastian AignerによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Advent of Code 2021 in Kotlin, Day 3: Binary Diagnostic

Day 4: 巨大なイカ

入力をパースし、より便利な処理のためにドメインクラスを導入する方法を学びます。

  • Advent of Codeでパズルの説明を読む
  • Anton ArhipovによるソリューションをGitHubで確認するか、ビデオを見る。

YouTube Advent of Code 2021 in Kotlin, Day 4: Giant Squid

Advent of Code 2020

TIP

Advent of Code 2020のパズルのすべてのソリューションは、GitHubリポジトリにあります。

Day 1: レポートの修復

入力処理、リストの反復処理、マップを構築するさまざまな方法、そしてlet関数を使ってコードを簡素化する方法を探ります。

  • Advent of Codeでパズルの説明を読む
  • Svetlana IsakovaによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin With the Kotlin Team: Advent of Code 2020 #1

Day 2: パスワードの哲学

文字列ユーティリティ関数、正規表現、コレクションに対する操作、そしてlet関数が式を変換するのにどのように役立つかを探ります。

  • Advent of Codeでパズルの説明を読む
  • Svetlana IsakovaによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with The Kotlin Team: Advent of Code 2020 #2

Day 3: トボガンそり軌道

命令型とより関数的なコードスタイルを比較し、ペアとreduce()関数を扱い、列選択モードでコードを編集し、整数オーバーフローを修正します。

  • Advent of Codeでパズルの説明を読む
  • Mikhail DvorkinによるソリューションをGitHubで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #3

Day 4: パスポート処理

when式を適用し、入力を検証するさまざまな方法(ユーティリティ関数、レンジの操作、集合のメンバーシップのチェック、特定の正規表現のマッチング)を探ります。

  • Advent of Codeでパズルの説明を読む
  • Sebastian AignerによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #4

Day 5: バイナリ搭乗

Kotlin標準ライブラリ関数(replace()toInt()find())を使って数値のバイナリ表現を扱い、強力なローカル関数を探求し、Kotlin 1.5でmax()関数を使う方法を学びます。

  • Advent of Codeでパズルの説明を読む
  • Svetlana IsakovaによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #5

Day 6: カスタム税関

標準ライブラリ関数であるmap()reduce()sumOf()intersect()union()を使って、文字列やコレクション内の文字をグループ化し、数える方法を学びます。

  • Advent of Codeでパズルの説明を読む
  • Anton ArhipovによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #6

Day 7: 便利なリュックサック

正規表現の使用方法、マップ内の値を動的に計算するためにKotlinからJavaのcompute()メソッドをHashMapに適用する方法、ファイルを読み込むためのforEachLine()関数の使用方法、そして深さ優先探索と幅優先探索という2種類の探索アルゴリズムの比較について学びます。

  • Advent of Codeでパズルの説明を読む
  • Pasha FinkelshteynによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #7

Day 8: ハンドヘルドの停止

命令を表すためにシールクラスとラムダを適用し、プログラム実行におけるループを発見するためにKotlinのセットを適用し、シーケンスとsequence { }ビルダー関数を使って遅延コレクションを構築し、実験的なmeasureTimedValue()関数を試してパフォーマンスメトリクスをチェックします。

  • Advent of Codeでパズルの説明を読む
  • Sebastian AignerによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #8

Day 9: エンコードエラー

any()firstOrNull()firstNotNullOfOrNull()windowed()takeIf()scan()関数を使ってKotlinでリストを操作するさまざまな方法を探ります。これらはKotlinらしい書き方を示しています。

  • Advent of Codeでパズルの説明を読む
  • Svetlana IsakovaによるソリューションをKotlinブログで確認するか、ビデオを見る。

YouTube Learn Kotlin with the Kotlin Team: Advent of Code 2020 #9

次のステップは?