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