オフラインリアルタイムどう書く E21 の問題 - ドキドキロシアンルーレット
オフラインリアルタイムどう書く E21 の問題です。
ロシアンルーレットをして、何人かがアタリを引いた。
最初にリボルバーに弾がどう込められていたか求めよ。
ルール
- 順番に引き金を引く
- ハズレた場合、弾倉を回転させる
- アタリを引いた場合、リタイア
- ただし、全員回転させかたに癖があり、常に同じ方向に同じだけ回転させる
- 残弾が 0 になるまで順番に続ける
入力
31[1]/6 のような形式。
最初の数字、3、1、1 はそれぞれ参加者。
/ の後ろの数字、6 はリボルバーの最大装填数。
参加者の数字は弾倉を回転させる度合い。この場合、3 ならば 3/6 、つまり弾倉を半回転させる。
[] で囲まれている参加者は当たりを引いた人。
出力
000010 のような形式。
0 がハズレ、1 がアタリ。
左から順番に並んでいる。
補足
不正な入力について考慮する必要はない。 出力候補が複数あることはない。
実装ができた方は Qiitaの記事 のコメント欄からリンクを張っていただくと見つけやすくて助かります。
サンプルデータ(修正版)
| # | 入力 | 期待 | 
|---|---|---|
| 0 | 3[2]3/6 | 000100 | 
| 1 | 21[3]/6 | 000100 | 
| 2 | 12[3]/6 | 000100 | 
| 3 | 3[2]1/6 | 000100 | 
| 4 | 3[2]3/6 | 000100 | 
| 5 | 1[1]3/6 | 010000 | 
| 6 | [3]4[4]3/7 | 1000100 | 
| 7 | 4[4]24/7 | 0000100 | 
| 8 | [4]41[1]/7 | 1000010 | 
| 9 | 1[1]33[1]/8 | 01000001 | 
| 10 | [1]12[4][3]/8 | 10100001 | 
| 11 | 2[2][1]12/8 | 01001000 | 
| 12 | 1[2][2][1]34/9 | 011100000 | 
| 13 | [4]1141[2]/9 | 100000010 | 
| 14 | [3]33[3][2]2/9 | 100000110 | 
| 15 | [5]1[3]44[2][3]/10 | 0100101001 | 
| 16 | 3[1][2]23[3][1]/10 | 0110110000 | 
| 17 | 33[5]12[5][2]/10 | 0000010011 | 
| 18 | 13[3]1[4][4][4][1]/11 | 00101100110 | 
| 19 | [5]3[2]35[1]1[4]/11 | 10001010001 | 
| 20 | 4[1]4[5]342[5]/11 | 00001010100 | 
| 21 | [5][4]55[2][2][4]33/12 | 001111100000 | 
| 22 | 3[2]415[1][4][4]3/12 | 010101000100 | 
| 23 | 3[2][4][2][4]4[5]4[1]/12 | 011001110010 | 
| 24 | 3555[6]33[6]4[1]/13 | 0010010000010 | 
| 25 | 4[1]32[6]3[3]4[3]4/13 | 0001100001001 | 
| 26 | 2[2]14[3][1][6][4]63/13 | 0010011001010 | 
| 27 | 2[9][9][9]8[2]3[4][8]2[1]8/15 | 011010100001110 | 
| 28 | [1][2][6]64[1][3]68[3][8]8/15 | 111001000011010 | 
| 29 | [7][6][5]54[5]8[5]53[8]1/15 | 010001110010001 | 
テストデータ(修正版)
サンプルデータ(修正前、一意にならない)
| # | 入力 | 期待 | 
|---|---|---|
| 0 | 3[2]3/6 | 000100 | 
| 1 | 31[2]/6 | 000010 | 
| 2 | 32[1]/6 | 000001 | 
| 3 | [2][2]2/6 | 100010 | 
| 4 | 1[3][2]/6 | 010010 | 
| 5 | 2[2]2/6 | 001000 | 
| 6 | 2[1]23/7 | 0010000 | 
| 7 | 13[1]3/7 | 0000100 | 
| 8 | [4]2[1]2/7 | 1010000 | 
| 9 | 3[1][2]2[2]/8 | 00011010 | 
| 10 | 4[4]21[1]/8 | 00001001 | 
| 11 | [2][2]124/8 | 11000000 | 
| 12 | [3]4[2][1][3]3/9 | 100010110 | 
| 13 | [2][1]43[2]3/9 | 101010000 | 
| 14 | 3[3][1]4[1]3/9 | 010100100 | 
| 15 | [3][5][3]554[4]/10 | 1100001100 | 
| 16 | [3]2[3][5][3]45/10 | 1110010000 | 
| 17 | 53[1]4[1]2[4]/10 | 0010100010 | 
| 18 | 2[3][2]5[4]54[1]/11 | 00110010100 | 
| 19 | [3][5]554[2]25/11 | 10000010010 | 
| 20 | [1]5[5]413[5]2/11 | 10100100000 | 
| 21 | [1]33[3]52[5][4]2/12 | 110000101000 | 
| 22 | 4[4]3[1][3]4[1]4[3]/12 | 010011010100 | 
| 23 | [3]2[1][2]14[2]54/12 | 101100000010 | 
| 24 | [2][6]45[3][2]42[6]2/13 | 1001100011000 | 
| 25 | [1]2[3][3]6[3][1]56[4]/13 | 1010001010101 | 
| 26 | 3[4]213[6]1[1]5[6]/13 | 0011000001100 | 
| 27 | 6[3]8[8]8[6]4[4][2][8][7][9]/15 | 000101111011001 | 
| 28 | [4]6[5]15[2]6[5]343[2]/15 | 100100100000110 | 
| 29 | 66[6]2[9]6[6][9]5[6]11/15 | 001001010000101 |