アドベントカレンダー:状態遷移パーサーによる問題解決

2025-04-09

アドベントカレンダーの最新の謎解きは、`do()`と`don't()`命令を解釈する必要があります。これらの命令は、`mul`命令の合計への寄与を有効または無効にします。正規表現はこの状態を処理するのが苦手です。なぜなら、正規表現は状態を持たない正規言語を認識するからです。著者は、パーサーベースのソリューションを使用し、状態変換器に昇格させることで、状態を持つパーサーを作成しました。このパーサーは`do()`、`don't()`、`mul`命令を効率的に処理し、約1MBの入力を0.12秒で処理します。これは正規表現ベースのアプローチよりも大幅に優れています。