🎅

Advent of Code 2024 Day 8: Resonant Collinearity

2024/12/27に公開

このページは

2024 年の Advent of Code の Day8 の記事です。 Day7 はこちら。

https://zenn.dev/yasuharu519/articles/d186c5f3bbbe23

Day 8: Resonant Collinearity

.0..A....
......0..
.......A.

のように、. とそれ以外の英数字で構成されたマップが与えられます。
. 以外の文字については、アンテナの位置を示しており、アンテナを示す文字はアンテナが出力する周波数を表しているようです。

Part1

アンテナが二つ並んでいるとき、アンテナ間の距離分離れたところに antinode(アンテナが出す信号の腹の部分)が発生するようです。
antinode はアンテナの両側に発生するため

.......
...A...
....A..
.......

というマップの場合は

..#....
...A...
....A..
.....#.

のように両側に antinode が発生します。

まずはすべてのアンテナを周波数ごとにまとめておきましょう。
その後、アンテナごとに同じ周波数を持つ別のアンテナとのベクトルを計算し、逆ベクトルとなるような位置を保存していけば、すべての antinode の場所をカウントできそうです。

https://github.com/yasuharu519/advent-of-code-2024/blob/main/python/day8/part1.py

Part2

Part2 では、Part1 で発生していた antinode が同じ周期で等間隔に発生するものとして、いくつ antinode があるかを求める問題です。

Part1 と同様にベクトル・逆ベクトルを計算し、同じ周期で発生したとしてマップ内の位置をカウントしていけば良さそうです。
すべてのアンテナはすべからく antinode になるため、アンテナの位置についても忘れずカウントするようにしましょう。

https://github.com/yasuharu519/advent-of-code-2024/blob/main/python/day8/part2.py

Day 9 に続きます。

https://zenn.dev/yasuharu519/articles/f3bd94bbc6d16a

Discussion