Advent of Code 2023 を完走した

毎年12月に開催されている Advent of Code に、2019年から参加している。

過去記事:

2023年のAdvent of Codeにも挑戦していて、年が明けてしまったが先日ようやく25日すべての問題に解答して 50 個のスターを集めることができた。

bsky.app

2023年は例年と比較しても難易度が高いものが多かったように思う(英語のストーリーを読解しきれない、のは毎年のことだが)。 いちおう「他の人の解答を見たりせずにまずは自力で回答する」という目標は達成してとりあえずの自力完答はできたが、正直どうするのが正しかったのか分からん…というものも多かった。

github.com

これから Reddit での議論を見たり他の言語でも解いてみたりして、もうちょっと勉強しておこうと思っているところ。

問題の概要と解いた感想

ネタバレしない程度に。

day01

行の文字列の中から数値(数値)を見つける。

1日目の小手調べにしてはpart2がちょっと面倒だった

day02

3色の石の数を推測するゲーム。

正しく入力をparseして処理できれば特に問題ない

day03

2次元の図ではあるが横に並ぶ数字は数値として見る必要がある、というもの。

数値と記号の位置関係をうまく判定できれば、という感じ

day04

クラッチカードの得点計算。

part2はAoCらしいメタな感じでちょっと頭を使う面白い問題

day05

数値の範囲から別の範囲へのマッピング、を繰り返す。

急に難易度が上がって大変だった…!

day06

チャージ時間を調整してボートが進める距離を予測する。

入力のフォーマットが不自然だったのは意味があったか…

day07

トランプのポーカーの役の強さでソートする。

またしてもpart2の展開を予測できなかった

day08

2分岐の迷路を指定された方向に無限に進み続ける。

part2がやはり少し難しく。入力が上手く作られていることに救われている感じ

day09

数列から差分を使って次の値を予測する。

スッと解けると気持ち良い

day10

2次元grid内でループする経路を検出。

part2はだいぶ苦労した… 理論を知っていればもっと簡単だったのだろうか

day11

膨張し続ける宇宙空間で銀河間の距離を求める。

これはpart2はこうなるだろうな、というのが予想できた

day12

イラストロジック的なもの。

そろそろ探索の実装も一筋縄ではいかなくなってくる

day13

2次元grid上で鏡写しになっている境界を見つける。

簡単な方法を自力では思いつけなくて悔しい

day14

2次元grid上で丸い石を一方向に動かして詰めていく。

今年は2次元gridモノが多いな…。

day15

HashとHashMapの独自実装。

工夫のしどころが見つからなかった…

day16

光の反射と分裂シミュレーション。

また2次元grid… しかしこういうのはvisualizationが面白そう

day17

動き方に制約のある最短経路探索。

制約ひとつで色んな考え方が生まれて面白いなぁ

day18

命令の通りに線を引いて囲んだ面積を求める、というもの。

AoCではよく出てくるタイプのもの、かな? すごい苦労したが…

day19

4つの値に対して分岐していくworkflowに流し込んで結果を得る。

どんどん実装が大変になってきた…!

day20

状態を保持する回路を使い、通るpulseのシミュレーション

しばらく悩んで色々ためして一応どうにか解を出せたが… という感じ

day21

2次元grid迷路内で、偶数歩で辿り着き得る範囲は。

これはめっちゃ難しくて悩みまくった… 何度も試行錯誤して解は出せたが

day22

3次元空間でジェンガを積んでいく。ブロックを取り除くとどうなる?

かなり考え込んでようやくどうにか解けた、、という感じ

day23

2次元gridでの一筆書き(同じ点を二度と通らない)最長経路。

計算は大変だったけどどうにか

day24

3次元空間内で移動する座標たち…!

おそらく2023で一番の難問だったと思う、しかし解けるとスッキリする。。

day25

グラフを3辺切断して2つのグループに分ける。

最小カット問題、というのか?アルゴリズム知らなくてちょっと泥臭いやり方で解いた