遠い世界の数式(ヒント2)

実装方法

実装方法はたくさんある。
3つ例を挙げる。

分解→解釈→計算

たぶん、順当な感じの作戦。

1. 分解

"12*3+456&7|89"
のような入力文字列を
["12", "*", "3", "+", "456", "&", "7", "|", "89"]
のように分解する。

2. 各要素の解釈

分解した結果の各要素を解釈する。
"*" のようなものを解釈した結果は何にしてもいいんだけど、たとえばこんな感じ。
[12, :mul, 3, :add, 456, :and, 7, :or, 89]

3. 優先順位に合わせて計算を行う

今回の問題の異常な優先順位に合わせてひとつひとつ計算する。
ここでの戦略は、ヒント1に書いた通り、

という、ふたつの作戦がある。

正規表現で要素を置換

正規表現を使うと、計算量は多くなるけどソースコードは短くなる。
文字列 "7|89"

eval("7|89") を評価した結果の文字列
に置換する、という作業を優先順位の順に実行し、演算子がなくなったら終了。という感じ。

ruby に やらせる

ヒント1には書かなかった作戦だけど、
12*3+456&7|89
を、
f(12)|f(3)&f(456)+f(7)*f(89)
と変換して、変換結果を eval したらそれでよくなるように関数 f を定義する。
というか、関数 f が返す値のクラスを定義する。という手もある。
仕事ならおすすめしないけど、こういう場ならこれもあり。