🎅

Advent of Code 2024 Day 14: Restroom Redoubt

2025/01/02に公開

このページは

2024 年の Advent of Code の Day14 の記事です。 Day13 はこちら。

https://zenn.dev/yasuharu519/articles/499f77f71fa5b9

Day 14: Restroom Redoubt

今回は Easter Bunny Headquarters (EBHQ) という場所が舞台です。トイレに行きたいのですが、トイレには厳重なセキュリティが施されており、簡単にはたどり着くことができません。

ロボットの位置やベクトルが与えられるので、動きをシミュレーションしたうえで各問いに答える必要があります。

Part1

Part1 では、各ロボットの現在の位置と、1 秒ごとの移動ベクトルが与えられます。各ロボットの 100 秒後の位置を求め、100 秒後の位置を 4 象限に分けたときに各象限に含まれるロボットの数を求めよという問題です。

まず、各ロボットは

p=0,1 v=1,1

のように現在の位置と移動ベクトルの情報が与えられます。

...........
...........
...........
...........
...........

のような 5 x 11 のマップの場合、4 つの象限に分けると

..... .....
..... .....

..... .....
..... .....

という 4 つの象限に分けることができます。それぞれの象限に含まれるロボットの数を数え、数を掛け合わせたものが答えとなります。 ロボットが左端に到着した際は右端に、上端に到達した場合は下端にといったように、ロボットの位置はループします。

現在の位置と移動ベクトルの値は与えられているため、 100 秒後の位置を求めて見ましょう。位置の計算の際は、100 秒後の移動距離をベクトルから求め、現在の位置を足し合わせたあと、剰余をとることで求めることが出来ます。

https://github.com/yasuharu519/advent-of-code-2024/blob/main/python/day14/part1.py#L33-L35

あとは、100 秒後の位置からどの象限に属するかを判定し、最終的には各象限ごとのロボットの数を数えて掛け合わせれば良さそうです。

Part2

Part2 では、ロボットの配置にイースターエッグが隠されていることが伝えられます。ロボットの配置が時折クリスマスツリーの絵になるというのです。ロボットの配置がクリスマスツリーの絵を作るのは何秒後になるでしょうか。

問題の "クリスマスツリーの絵" とは? という感じで当初全く検討もつかなかったのですが、何かヒントがあるかもしれないと、とりあえず毎秒ごとのロボットの配置を出力してみることにしました。

asciicast

よくよく見てみると 33 秒後, 87 秒後, 134 秒後, 190 秒後, 235 秒後, 293 秒後... 等のタイミングで、ロボット達の位置が寄っているのがわかりました。

またタイミングも 33, 134, 235 と 101 ずつ増えている (同時に 87, 190, 293 と 103 ずつ増えている) というように規則性がありそうです。

asciicast

試しに 33 秒後から 101 秒ごとにロボットの位置を出力してみると、なんとクリスマスツリーが現れました!

と、自分が解いた方法はかなりヒューリスティックな方法で、たまたま見つけた感が強いのですが、他にももっと良い方法がありそうな気がします。

Day 15 に続きます。

https://zenn.dev/yasuharu519/articles/930eef6cd3d253

Discussion