君の知らない遠い世界の数式を評価してもらう。
数式は
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
|
解けた方と、ある程度時間を費やしたけど諦めた方は以下のページの答えを見ると良いと思います。
思いついていない実装方法があると思うよ。