🎅

Advent of Code 2024 Day 3: Mull It Over

2024/12/20に公開

このページは

2024 年の Advent of Code の Day3 の記事です。 Day2 はこちら。

https://zenn.dev/yasuharu519/articles/7466cf0680b540

Day 3: Mull It Over

今回はコンピュータのメモリが壊れてしまったが、文字列の中の mul(X,Y) という命令を読み取って、値を計算すると行ったもののようです。

Part1

"文字列の中から決まったパターンを取り出す" といえば、正規表現が使えそうですね。mul(X,Y) という文字列を取り出して X \times Y の計算をしていくようにしましょう。X, Y は 1 から 3 桁の整数ということなので、 \d{1,3} を使えば良さそうです。今回は数字の部分をグループ化して取り出します。

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

Rust の場合もほぼ同様なのですが、 正規表現を扱うライブラリが標準でついていません。正規表現を使うクレートとしてはregex があるので、そちらを利用しましょう。

https://github.com/yasuharu519/advent-of-code-2024/blob/main/rust/src/bin/3-1.rs

Part2

Part2 では

  • do()
  • don't()

という命令が追加されました。do() はフラグ操作に関する命令で、do() が実行された後は計算の有効化、 don't() が実行された後は計算の無効かを行うといったものです。

今回は Part1 の正規表現に加えて do()don't() にもマッチするようにして、実際にフラグを操作しながら計算を行うようにしました。

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

Rust でも正規表現部分を変えてほぼ同じように実装できました。

https://github.com/yasuharu519/advent-of-code-2024/blob/main/rust/src/bin/3-2.rs

Day 4 に続きます。

https://zenn.dev/yasuharu519/articles/5ef6154a07cc6d

Discussion