Perl入学式 2018 in東京 秋開講 第1回 お疲れ様でした
Perl入学式 2018 in東京 秋開講 第1回
受講された方、サポーターの方、お疲れ様でした。
講師をやったジャージの人です。
今期からの新要素は以下となります。
不慣れなところが多く、お手数をおかけしました。
今回ですが、Perlの学習内容としては print "Hello! World";
のみなので特に復習問題はないです。
また来月お会いしましょう!
Perl入学式 2018 in東京 秋開講 第1回 ピザ会の課題
Perl入学式 in東京 では講義終了後、希望者で集まりピザ会と称した懇親会を行っています。
(ジュース・ピザ代は実費)
昨年からそこで余興として xtetsuji さんが課題を出し、そこにチャレンジャーが回答して公開する、というようなことをやってます。
今回の出題は、シミュレーションでした。
過去の出題傾向からてっきりWebからスクレイピングってネタが来ると思ってたので完全に不意打ち。
ルール
- プレイヤーA、プレイヤーBに手札が3枚配られる
- 今回は配られる手札は固定
- プレイヤーA:1, 5, 10
- プレイヤーB:2, 2, 2
- 1 〜 40 の目がランダムに出るルーレットを3回まわし、手札と同じ数字が出たら手札を捨てる
- プレイヤーBのように同じ手札が複数枚ある場合には、同じ目が出ても捨てられるカードは1枚だけ
- 先にカードがなくなった方が勝ち
ヒント
- 1 〜 40 のランダムな数字を出すには
int( rand(40) + 1 )
を使う
うちの予想
- 3枚のカードが来て、ルーレットも3回まわすんだから、プレイヤーAもプレイヤーBも勝率は同じなのではないか?
コード
ピザ会で書いたものを少し改変して、コメントを入れてアップしています。
Perl入学式でやる範囲の内容のみ、かつリファレンスを使わない、という縛りで書いてみました。
結果、めっちゃ煩雑になりましたわ・・・
Perl入学式 2018 in東京 秋開講 第1回 ピザ会でのお題 — Bitbucket
なお、コードを実行すると勝利回数は6〜7倍プレイヤー1の方が高いですが、これは確率的に正しいとのこと。
うちはサイコロに置き換えて考えて納得した気になってるけど、正しいかどうか不安・・・
昨日の #Perl入学式 in東京 ピザ会のお題を解き直してたけど、サイコロに置き換えてやっとわかった。
— sironekotoro (@sironekotoro) 2018年10月28日
同じ目が3回連続で出る(2,2,2)のと、3つの異なる数字(1,3,5)が順不同で出るのでは確率が違う
サイコロに置き換えると
- プレイヤーAの手札(1, 3, 5)
- 出た目が 1, 3, 5 どれかに合致すれば札を捨てられる
- 最初に 1 が来ても 3 が来ても 5 が来ても手札を捨てることができる
- 3/6 * 2/6 * 1/6 = 6/216
- 出た目が 1, 3, 5 どれかに合致すれば札を捨てられる
- プレイヤーBの手札(2, 2, 2)
- 3回とも同じ目が出なくてはいけない
- 1/6 * 1/6 * 1/6 = 1/216
これで約6倍の差、って言ってたのもわかる気がする・・・合ってるかな?