Edited at

オフラインリアルタイムどう書く第三回の参考問題

More than 5 years have passed since last update.

オフラインでリアルタイムに「どう書く」をやるイベント。

またやります

http://atnd.org/events/31590

で。例によって参考問題。

難易度と分量はこれを目安に。


ボールカウント(野球)


問題の説明

野球のボールカウント・アウトカウントの遷移を計算する。(得点・ランナー・イニング の計算は不要)

ただし、ストライク・ボール・ファウル・ヒット・ピッチャーフライしかない。

細かいルールは下記の通り:


  • ストライクが3つになったらアウトが増え、ストライクとボールがゼロになる。

  • ボールが4つになったらフォアボールになり、ストライクとボールがゼロになる。アウトは増えない。

  • ヒットを打ったらストライクとボールがゼロになる。アウトは増えない。

  • ピッチャーフライを打ったらストライクとボールがゼロになり、アウトが増える。

  • アウトが3つになったら、アウト・ストライク・ボール全てゼロになる。

  • ファウルの場合、もともとストライクが1以下の場合はストライクが増え、ストライクが2の場合には変化なし。

  • 入力は "sbsfbhsshssbbffbbssbs" のように、ひとつながりの文字列として与えられる。

  • s, b, f, h, p がそれぞれ ストライク、ボール、ファウル、ヒット、ピッチャーフライ を意味する。

  • 出力は、アウト・ストライク・ボールの順にカウントをつなげたものをコンマで区切る。例を参照。

  • 不正入力には対処しなくてよい。

  • 最終回を超えることも考慮しなくてよい。


入力と出力の例

以下、入力 -> 出力 の形式で例を示す。

s -> 010

sss -> 010,020,100

bbbb -> 001,002,003,000

ssbbbb -> 010,020,021,022,023,000

hsbhfhbh -> 000,010,011,000,010,000,001,000

psbpfpbp -> 100,110,111,200,210,000,001,100

ppp -> 100,200,000

ffffs -> 010,020,020,020,100

ssspfffs -> 010,020,100,200,210,220,220,000

bbbsfbppp -> 001,002,003,013,023,000,100,200,000

sssbbbbsbhsbppp -> 010,020,100,101,102,103,100,110,111,100,110,111,200,000,100

ssffpffssp -> 010,020,020,020,100,110,120,200,210,000

※ 解答例をコメント欄に(ソースではなく)リンクの形で書いてくださるとありがたいです。

※ そのうち ruby か groovy で解答例を投稿するつもり。