Ruby
確率

勝率5割になるはずの対戦ゲームでありえないほどの連敗が起きる現象をRubyのコードで検証

ウデマエに関係なく勝率5割に収束すると言われている対人ビデオゲームで、びっくりするほど連勝するときもあれば、ありえないほど連敗するときもあります。連勝したときは浮かれてツイッターでドヤるぐらいですが、ありえないほど連敗したときは勝率5割のはずでこんな負けが続くなんて意図的に懲罰をくらっているとしか思えなくなって不満の矛先を京都の方向に向けたり、こんなに不幸が続くともう死ぬんじゃないかと思えてくるほどです。そこで1日20回を1年半ほどプレイし、勝率が51%だったときの連勝・連敗の数をRubyのコードでシミュレートしてみました。

play_per_day = 20           # 1日20回を

days = (365 * 1.5).to_i # 1年半ぐらい遊んでいる
win_rate = 0.51 # 勝率

n = play_per_day * days
v = n.times.map { rand <= win_rate }
v = v.chunk(&:itself).group_by(&:itself).transform_values(&:size)
v = v.sort_by { |(_, a), _| -a.size }
puts v.map { |(k, a), c| "%2d連%s %d回" % [a.size, k ? "勝" : "敗", c] }
# >> 15連勝 1回
# >> 14連敗 1回
# >> 12連敗 1回
# >> 10連敗 3回
# >> 10連勝 2回
# >> 9連勝 2回
# >> 9連敗 3回
# >> 8連敗 14回
# >> 8連勝 10回
# >> 7連勝 28回
# >> 7連敗 16回
# >> 6連勝 45回
# >> 6連敗 39回
# >> 5連勝 84回
# >> 5連敗 70回
# >> 4連勝 183回
# >> 4連敗 163回
# >> 3連敗 329回
# >> 3連勝 324回
# >> 2連勝 711回
# >> 2連敗 739回
# >> 1連敗 1400回
# >> 1連勝 1387回

これでわかったことは、1年半もやってれば確率的に15連勝することもあれば、14連敗することもあって、それは急に上達したり、懲罰をくらったりしているわけではないということでした。

なんのゲームかはお察しください。

あと、Ruby使いやすいです。