フォークじゃない 〜 横へな 2014.2.1 問題

問題

スーパーのレジを想像してほしい。
レジは 1番から 5 番までの 5 個ある。
フォーク並びになっておらず、レジごとに列を作って待つ。
各レジの人の処理能力は下表のようになっている。

番号 1 2 3 4 5
単位時間あたりに何人処理できるか 2 7 3 5 2

レジに来る人は、何人かまとめて同じ列に並ぶ(レジ待ち中に雑談したい、とか)。
どのレジに並ぶのかの判断は

  1. 列が短いレジに並ぶ
  2. 列の長さが最短の列が複数あったら、番号の若いレジに並ぶ。

という順序で判断する。
つまり、客は各レジの処理能力の違いを知らない。

実装をを簡単にするため

とする。

入力文字列が示す状況が終わった時点で、各レジで待っているひとの数を、1番のレジから順に答えよ。

入力

入力は、 1 2 3 4 5 6 7 8 9 x . のいずれかの文字が空白なしで並んだものである。
1 は、客が1人来てレジに並ぶことを意味する。
2 から 9 は、2人組から9人組までの客が来ることを表している。これらの客はまとめて同じレジに並ぶ。
x は、レジの処理に絶望的に長くかかる客が1人来ることを意味している。この客のレジ処理は終わらないが、あとからくる客はそのことに気づかない。
19 および x の示す内容は「客が来てレジに並ぶ」というイベントだが、このイベントの間はレジは処理を進めない。
一方、 . は、各レジが処理を行うというイベントを意味する。
. が入力された時は、1番から 5 番の各レジは、それぞれ 2人、7人、3人、5人、2人 の人を処理する。
例えば、各レジに普通の( つまり、x ではない )客 が 7 人ずつ並んでいる状態で . が入力された場合、各レジの列の長さは
5人、0人、4人、2人、5人
となり、もう一回 . が入力された場合、各レジの列の長さは
3人、0人、1人、0人、3人
となる。

出力

出力は、入力文字列が表す状況が最後まで進行したあと、各レジに何人ひとが残っているかを示す文字列。
各レジに並んでいるひとの数10進数で表したものを、コンマ区切りでつなげたもの。

例えば、入力が 42873x.3. である場合、最初の . の前までで、列の長さは
4人、3人、8人、7人、3人
となる。 . で各レジが会計をする。2番のレジには x がいるので、x の前にいる2人についてだけ処理が行われる。結果、列の長さは
2人、1人、5人、2人、1人
となる。
その後、2番のレジに3人並んだ後、会計処理が一回走る。最終的には各レジに
0人、4人、2人、0人、0人
並ぶので、出力するべき文字列は
0,4,2,0,0 となる。

補足

サンプルデータ

# 入力 期待
0 42873x.3. 0,4,2,0,0
1 1 1,0,0,0,0
2 . 0,0,0,0,0
3 x 1,0,0,0,0
4 31. 1,0,0,0,0
5 3x. 1,1,0,0,0
6 99569x 9,9,6,6,9
7 99569x33 9,9,9,9,9
8 99569x33. 7,2,6,4,7
9 99569x33.. 5,0,4,0,5
10 12345x3333. 4,0,3,2,3
11 54321x3333. 3,0,3,0,4
12 51423x3333. 3,4,4,0,4
13 12x34x. 1,0,1,0,2
14 987x654x.32 7,6,4,10,5
15 99999999999x99999999.......9. 20,10,12,5,20
16 997 9,9,7,0,0
17 .3.9 1,9,0,0,0
18 832.6 6,6,0,0,0
19 .5.568 3,5,6,8,0
20 475..48 4,8,0,0,0
21 7.2..469 1,4,6,9,0
22 574x315.3 3,3,1,7,1
23 5.2893.x98 10,9,5,4,1
24 279.6xxx..4 2,1,4,1,1
25 1.1.39..93.x 7,1,0,0,0
26 7677749325927 16,12,17,18,12
27 x6235.87.56.9. 7,2,0,0,0
28 4.1168.6.197.6. 0,0,3,0,0
29 2.8.547.25..19.6 6,2,0,0,0
30 .5.3x82x32.1829.. 5,0,5,0,7
31 x.1816..36.24.429. 1,0,0,0,7
32 79.2.6.81x..26x31.1 1,0,2,1,1
33 574296x6538984..5974 14,13,10,15,14
34 99.6244.4376636..72.6 5,6,0,0,3
35 1659.486x5637168278123 17,16,16,18,17
36 .5.17797.x626x5x9457.3. 14,0,3,5,8
37 ..58624.85623..4.7..23.x 1,1,0,0,0
38 716.463.9.x.8..4.15.738x4 7,3,5,8,1
39 22xx.191.96469472.7232377. 10,11,18,12,9
40 24..4...343......4.41.6...2 2,0,0,0,0
41 32732.474x153.866..4x29.2573 7,5,7,8,5
42 786.1267x9937.17.15448.1x33.4 4,4,8,4,10
43 671714849.149.686852.178.895x3 13,16,13,10,12
44 86x.47.517..29621.61x937..xx935 7,11,8,8,10
45 .2233.78x.94.x59511.5.86x3.x714. 4,6,10,8,8
46 .793...218.687x415x13.1...x58576x 8,11,8,6,9
47 6.6x37.3x51x932.72x4x33.9363.x7761 15,13,15,12,15
48 6..4.x187..681.2x.2.713276.669x.252 6,7,8,6,5
49 .6.xx64..5146x897231.x.21265392x9775 19,17,19,20,17
50 334.85413.263314.x.6293921x3.6357647x 14,14,12,16,10
51 4.1..9..513.266..5999769852.2.38x79.x7 12,10,13,6,10

C/C++/Java 用のテストデータ