🎅

Advent of Code 2024 Day 7: Bridge Repair

2024/12/27に公開

このページは

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

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

Day 7: Bridge Repair

Day 7 では

3267: 81 40 27

のような入力が与えられ、 : の右の数列の 足し算・かけ算から左の数字を作れるか? という問題です。

Part1

とりあえず全部試して見て条件に合うものがあるかを見れば良さそうです。

データを見る限り、負の値もないため、途中の計算結果が対象の値を超えてしまうなどした際に打ち切るようにすれば早く結果が得られそうです。

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

Part2

Part2 では、 +* に加えて || という前後の数字を繋げて新しい数字を作る演算子が追加されます。
例えば 15 || 6 = 156 というように計算するといったものです。
優先度は他のものと同様に左から順に計算していくので良さそうです。

計算の優先度も同じであるため、新しい計算パターンも追加してチェックすれば良さそうですね。

l = len(str(nums[0]))
res |= search(nums[1:], (current * (10 ** l)) + nums[0], target, path + " || {}".format(nums[0]))

といったように、桁数をカウントした上で桁上げし、新しい数字を作るようにしました。

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

Day 8 に続きます。

https://zenn.dev/yasuharu519/articles/1739051153a249

Discussion