遠い世界の数式

問題

君の知らない遠い世界の数式を評価してもらう。
数式は
4*5+6&7|8
のような形になっている。
偶然にも、演算子の意味は ruby の各演算子の意味と同じなんだけど、優先順位は ruby とは異なるのでそのまま eval するわけにはいかない。
演算子の優先順位は下表の通り。一応意味も書いたけど、意味は ruby と同じ。

↑優先順位高
| ビット or
& ビット and
+ 加算
* 乗算
↓優先順位低

例えば。
4*5+6&7|8
は、ruby では
(((4*5)+6)&7)|8
なので 10 だけど、この問題では
4*(5+(6&(7|8)))
と評価するので、 44 となる。

入力

入力は「 4*5+6&7|8 」のような文字列。
各項は、すべて整数。全部十進数。
演算子は上の表にある *, +, &, | のいずれかしか現れない。
括弧もないし、単項プラスや単項マイナスもない。余分な空白もない。

出力

出力は、評価結果の十進数表現の文字列。 44 こんな感じ。

ヒント

補足

サンプルデータ

# 入力 期待
0 4*5+6&7|8 44
1 15*5 75
2 15+5 20
3 15&5 5
4 15|5 15
5 30*15*5 2250
6 30*15+5 600
7 30*15&5 150
8 30*15|5 450
9 30+15*5 225
10 30+15+5 50
11 30+15&5 35
12 30+15|5 45
13 30&15*5 70
14 30&15+5 19
15 30&15&5 4
16 30&15|5 14
17 30|15*5 155
18 30|15+5 36
19 30|15&5 5
20 30|15|5 31
21 1+2+3+4+5+6+7+8+9+10 55
22 1*2*3*4*5*6*7*8*9*10 3628800
23 1+2+3+4+5*6+7+8+9+10 600
24 1*2*3*4*5+6*7*8*9*10 1330560
25 1|2|4|8|16|32|64|128|256|512 1023
26 2046&2045&2043&2039&2031&2015&1983&1919&1791&1535 1024
27 3|0*6&0 0
28 6&9|2+4 6
29 9+5&0*0 0
30 0|8+4+2*9 126
31 63|75+35*53 8586
32 29+14|50&68*87 2871
33 7&26+25&22|9+67 94
34 19|8583&53+34&32 53
35 313&513+896|316*209 200013
36 0|3+4*9+3|9|1&2&5*4&0 0
37 59+26&76*71&87|39|43*76 361532
38 714*706&728&738+670+657 1450134
39 30|7*57|2+7|7+91850&32&94 2046
40 89+27*43|1|82&94*96|26+84 2150640
41 99782&561*68|369137+80&41 0
42 6602&5785|2288+2|7424+1527 15297
43 166*648&288|418+778|279*655 100792710
44 70*13+36&23+22+66|92|95*53&9 9380
45 23+174&56&179408|6727*724*626 10424152
46 13&84&43*6+77|56+59|15&24+9*66 0
47 928&728*151+695&321*369|845+771 161873920
48 5984|86*8519&43184&7183+401*48|6629+97|852 18135297180
49 217|999&112+511+357+514&98*796|718*715|442&682 663026760
50 461&424&462+557+855|656|924*234*557&451*884|322 402208560

ソースコード形式のデータ

こたえ

解けた方と、ある程度時間を費やしたけど諦めた方は以下のページの答えを見ると良いと思います。

思いついていない実装方法があると思うよ。