キッカソンの時に話題になっていた、Perl入学式in東京のピザ会でのお題の過去問があったので解いてみました。
ソースコードにある問題文だけを見て書いていたので、「ルーレットを3回まわし」の部分がすっかり抜けていました。 なので決着がつくまで回すとどうなるか、というような勝負になっています。
勝率が6倍くらい、という話だったのでは、と思って気づいた感じです。 手元で試すと勝数も倍率も結構ばらつきがありました。
決着がつくまでやるとせいぜい3倍くらい。 こっちは何度試してもだいたい同じくらいでした。
(なお、「ルーレットを3回まわし」の勝負にする場合は、44行目の while (1)
を for my $i (1 .. 3)
に変更すれば動きます(試してみたので54行目に draw
が書いてあります(消し忘れ))
リファレンス不使用縛りがあると書ける気がしないのでそっちはやりません。
ただ、対戦人数を増やすのも割と簡単に対応できる柔軟性のあるコードになっていると思います。 「ルーレットを3回まわし」の場合は、人数を増やしても勝つ回数にはほとんど影響しない、というのも面白いですね。 ルーレットを回す回数を倍の6回にするとどうなるのか? とかいろいろと数値を変えて試してみたくなりますね。
この問題も、最初は簡単そうに思ったのですがやってみると結構難しいですね。 同じ数字をどうやって消し込んでいくか、ちょっと考えてしまいました。