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以下の場合に引き続けるプレイヤーを考える。二人が勝負した場合の勝率をシミュレーションせよ。