松江Ruby会議06のライブコーディング大喜利で出題された問題について

松江Ruby会議06ではスタッフとして参加していました。

スタッフの活動の中に問題を考えるというものがありました。

大喜利とライブコーディングの組み合わせで良い問題とはどういうものなのかで悩みましたが、答えが見つからなかったので、最後は大喜利の要素がない問題を作成して提出しました。

以下は採用されて松江Ruby会議06で出題された問題です。

0から13回のいずれかの回数だけトランプのカードを引けます。
引いたカードが、すべてスペードの絵柄である場合の確率を返すプログラムを作成してください。

以下は、トランプの内容です。

* トランプの枚数は、52枚です。
* トランプの絵柄は、「スペード、クローバー、ハート、ダイヤ」の4つです。
* 絵柄ごとにカードは、13枚あります。
* カードの種類は、「a 2 3 4 5 6 7 8 9 10 j q k」の13種類です。

答えとして以下も用意してはいましたが、本番では使用しませんでした。

最初に「起こりうるすべての数の確率」を求めます。
トランプの数は52枚であり、そこから2枚引いた場合の確率を考えます。
トランプの52枚から2枚を引く確率は、(52 * 51) / (2 * 1)で1326通りです。

次に「そのことがらが起こる確率」を求めます。
トランプのスペードの枚数は13枚であり、そこから2枚引いた場合の確率を考えます。
スペード13枚から2枚を引く確率は、(13 * 12) / (2 * 1)で78通りです。

「そのことがらが起こる確率 / 起こりうるすべての数の確率で求められます。
トランプの52枚から2枚を引いた時にすべてスペードである確率は、(78 / 1326r)で(1 / 17)です。

3枚の場合を計算します。
(52 * 51 * 50) / (3 * 2 * 1)の組み合わせは、22100通りです。
(13 * 12 * 11) / (3 * 2 * 1)の組み合わせは、286通りです。
(286 / 22100r)は、(11 / 850)です。


https://gist.github.com/b10b680414b41d762f6d.git

反省点としては、引いたカードを元に戻すのかという疑問がTwitterツイートされていたので、そこも問題文の中でどう扱うのかを書くべきだったなあと思いました。