Parenist養成ゼミ: 演習課題1
この記事は、Parenist養成ゼミシリーズの記事である。
xorは代数的に面白い特徴を有する。今回の課題は書籍解きたくなる数学から拝借した。
課題
以下の課題を解け。ただし、参照透過性のある関数を実装する際にはテストも実装すること。
0
と1
からなるlistを返す関数bits
を実装せよ。引数にて0
の個数と1
の個数を指定できること。listの順序は問わない。bits
の返り値のlistの順序がrandomであるような関数rand-bits
を実装せよ。必要に応じて、rand moduleをimportすること。- 2値を受け取り、同一の場合は
0
を、そうでない場合は1
を返す関数xor
を実装せよ。 以下の手続きをシミュレーションする関数
simulate
を実装せよ。- 袋の中に0と書いた紙をn枚、1と書いた紙をm枚入れる。(n > 0, m > 0)
2. 無造作に2つ取り除き、取り除いたものが同一の場合は0を、そうでない場合は1の紙を追加する。
3. 最後の1枚の紙は何か。
n = 6, m = 5
の場合を机上でシミュレーションし、その結果がsimulate
関数の返り値と一致することを確認せよ。- この手続きの結果は
m
により一意に定まることを説明せよ。また、その値は何か。 n
とm
それぞれ1
から10
の全組み合わせで先の仮説が満たされるか確認するテストを実装せよ。