mtsmfm blog

オフラインリアルタイムどう書く E21 の問題 - ドキドキロシアンルーレット

オフラインリアルタイムどう書く E21 の問題です。

ロシアンルーレットをして、何人かがアタリを引いた。

最初にリボルバーに弾がどう込められていたか求めよ。

ルール

  1. 順番に引き金を引く
  2. ハズレた場合、弾倉を回転させる
  3. アタリを引いた場合、リタイア
  4. ただし、全員回転させかたに癖があり、常に同じ方向に同じだけ回転させる
  5. 残弾が 0 になるまで順番に続ける

入力

31[1]/6 のような形式。 最初の数字、311 はそれぞれ参加者。 / の後ろの数字、6 はリボルバーの最大装填数。

参加者の数字は弾倉を回転させる度合い。この場合、3 ならば 3/6 、つまり弾倉を半回転させる。 [] で囲まれている参加者は当たりを引いた人。

出力

000010 のような形式。

0 がハズレ、1 がアタリ。 左から順番に並んでいる。

補足

不正な入力について考慮する必要はない。 出力候補が複数あることはない。


実装ができた方は Qiitaの記事 のコメント欄からリンクを張っていただくと見つけやすくて助かります。

サンプルデータ(修正版)

#入力期待
03[2]3/6000100
121[3]/6000100
212[3]/6000100
33[2]1/6000100
43[2]3/6000100
51[1]3/6010000
6[3]4[4]3/71000100
74[4]24/70000100
8[4]41[1]/71000010
91[1]33[1]/801000001
10[1]12[4][3]/810100001
112[2][1]12/801001000
121[2][2][1]34/9011100000
13[4]1141[2]/9100000010
14[3]33[3][2]2/9100000110
15[5]1[3]44[2][3]/100100101001
163[1][2]23[3][1]/100110110000
1733[5]12[5][2]/100000010011
1813[3]1[4][4][4][1]/1100101100110
19[5]3[2]35[1]1[4]/1110001010001
204[1]4[5]342[5]/1100001010100
21[5][4]55[2][2][4]33/12001111100000
223[2]415[1][4][4]3/12010101000100
233[2][4][2][4]4[5]4[1]/12011001110010
243555[6]33[6]4[1]/130010010000010
254[1]32[6]3[3]4[3]4/130001100001001
262[2]14[3][1][6][4]63/130010011001010
272[9][9][9]8[2]3[4][8]2[1]8/15011010100001110
28[1][2][6]64[1][3]68[3][8]8/15111001000011010
29[7][6][5]54[5]8[5]53[8]1/15010001110010001

テストデータ(修正版)

サンプルデータ(修正前、一意にならない)

#入力期待
03[2]3/6000100
131[2]/6000010
232[1]/6000001
3[2][2]2/6100010
41[3][2]/6010010
52[2]2/6001000
62[1]23/70010000
713[1]3/70000100
8[4]2[1]2/71010000
93[1][2]2[2]/800011010
104[4]21[1]/800001001
11[2][2]124/811000000
12[3]4[2][1][3]3/9100010110
13[2][1]43[2]3/9101010000
143[3][1]4[1]3/9010100100
15[3][5][3]554[4]/101100001100
16[3]2[3][5][3]45/101110010000
1753[1]4[1]2[4]/100010100010
182[3][2]5[4]54[1]/1100110010100
19[3][5]554[2]25/1110000010010
20[1]5[5]413[5]2/1110100100000
21[1]33[3]52[5][4]2/12110000101000
224[4]3[1][3]4[1]4[3]/12010011010100
23[3]2[1][2]14[2]54/12101100000010
24[2][6]45[3][2]42[6]2/131001100011000
25[1]2[3][3]6[3][1]56[4]/131010001010101
263[4]213[6]1[1]5[6]/130011000001100
276[3]8[8]8[6]4[4][2][8][7][9]/15000101111011001
28[4]6[5]15[2]6[5]343[2]/15100100100000110
2966[6]2[9]6[6][9]5[6]11/15001001010000101

テストデータ(修正前、一意にならない)