Parenist養成ゼミ: 演習課題3
この記事は、Parenist養成ゼミシリーズの記事である。
今回はトランプを題材として出題した。
課題
以下の課題を解け。ただし、参照透過性のある関数を実装する際にはテストも実装すること。
52枚の一意なカードからなるトランプを考える。
- カードおよび、その数値と記号を表現するデータ構造を考えよ。
- 記号と数値を受け取りカードを返す関数
make-cardを作成せよ。 - カードを受け取り、記号を取得する関数
card->suitを作成せよ。 - カードを受け取り、数値を取得する関数
card->numberを作成せよ。 - カードを受け取り、印字表現を返す関数
card->stringを作成せよ。 - 52枚の一意なカードを返す関数
make-deckを作成せよ。 - デッキを受け取り、残りの枚数を返す関数
sizeを作成せよ。 - デッキを受け取り、シャッフルして返す関数
shuffleを作成せよ。 - デッキを受け取り、表示する関数
showを作成せよ。 - デッキからカードを1枚取得するマクロ
dealを作成せよ。 - カードのリストを受け取り、black-juckのスコアを返す関数
black-juck-scoreを作成せよ。21を超えた場合は0を返せ。ただし、エースは1または11として扱ってよく、絵札は10として扱うこと。 - 常に2枚で勝負するプレイヤーと、スコアが14以下の場合に引き続けるプレイヤーを考える。二人が勝負した場合の勝率をシミュレーションせよ。