前書き
Skatは、3人のプレイヤー向けの伝統的なドイツのカードゲームです。このデッキは32枚のカードで構成されています:エース、キング、クイーン、ジャック、10、9、8、7、4スーツすべて(クラブ、スペード、ハート、ダイアモンド)。
すべてのラウンドで、1人のプレーヤーがソロをプレイし、他の2人が彼と対戦します。ラウンドの開始時に、各プレイヤーに10枚のカードが配られ、残りの2枚のカードはスカットと呼ばれ、真ん中に裏向きに置かれます。ソロプレーヤーは、入札フェーズによって決定されます。これは、このチャレンジで対処しなければならないゲームの一部です。これについては以下で詳しく説明します。
入札フェーズで勝ったプレイヤーがソロプレイヤーになります。彼はスケートを拾い上げ、次に2枚のカード(同じかもしれませんが、他のチームは知らない)を落とし、切り札のスーツを選び、ラウンドが始まります。
1ラウンドは10のトリックで構成されています。トリックに勝ったプレイヤーは、すべてのカードがプレイされるまで次のプレイヤーをリードします。ここではルールを説明しませんが、多くの切り札を持っているのは良いことです。ルールについて学びたい場合は、この投稿の冒頭でリンクしたウィキペディアの記事を確認してください。ただし、このチャレンジには必要ありません。
チャレンジ
2人の息子にスケートの遊び方を教えたいと思います。ルールはそれほど難しくないので、すぐにそれに入ります。彼らに苦労を与える唯一のことは、特に彼らの手のゲーム価値を計算する入札です。そこで、現在のハンドでビッドできる最大のゲーム価値を出力する小さなプログラムを書くことにします。
ゲーム価値の計算
すべてのハンドには特定のゲーム価値があります。それはあなたが持っている連続したジャックの量と、あなたが切り札として選びたいスーツによって決まります。最初の要素であるジャックから始めましょう!
ジャックファクター
ジャックは常に切り札であり、他のすべての切り札よりも優れています。4つのジャックの強さの順序は次のとおりです。
- クラブのジャック(最高)
- スペードのジャック
- ハートのジャック
- ダイヤモンドのジャック(最低)
詳細な説明では、ここで割り当てた番号でそれらを参照します。
ゲームの価値の一部である、あなたの手にあるジャックから得られる何らかの種類の要因があることを覚えていますか?すごい!取得方法は次のとおりです。
このジャックファクターは、トップジャックの数(上記の順序を参照)に1を加えたものです。したがって、4つのジャックがすべてある場合は4 + 1 = 5です。最初の2つのジャックしかない場合は2 + 1 = 3。
あるいは、物事をもう少し複雑にするために、ジャックファクターは、欠落しているトップジャックの数に1を足した数に1を加えたものにすることもできます。最初の3つが欠落しています。3+ 1 = 4です。ここでは、上記の番号付けを使用したいくつかの例を示します。
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
それが最初の要因でした。2番目のものを取得する方法は次のとおりです。
トランプスーツファクター
これは非常に簡単です。2番目の要因は、ソロプレーヤーが次のマッピングを使用して選ぶトランプスーツによって決まります。
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
それは簡単でしたね。
ゲームの価値
ゲームの価値は2つの要素の積です。とても簡単だと思いますか?違う!ジャックファクターは固定されていますが、スーツファクターは固定されていません。あなたが切り札として選んだスーツは、切り札の量と手札にある非切り札の価値に依存します。良いハンドがどのように見えるかを説明するにはあまりにも複雑すぎるため、次のアルゴリズムを使用します。
which-trump-do-i-pickアルゴリズム
入札に参加する必要はありません。あなたの手がソロをプレイするにはあまりにも悪いと判断した場合、あなたはただパスできます。あなたのハンドは次の基準に合致しなければプレイできません:
少なくとも6枚のトランプカード(選択したトランプスーツのカード+ジャックの数)を用意します。これが複数のスーツで可能であれば、より多くの切り札をもたらすものを選んでください。まだネクタイがある場合は、上記の最高評価のスーツを選びます。
トランプ以外のカードのうち、少なくとも1つのエースがあります。
あなたの手がこの両方の基準に一致しない場合、合格します。もしそうなら、計算されたゲーム値と選択された切り札を出力します。
短いメモ:もちろんこれは非常に単純化されたアルゴリズムです。このようなチャレンジでカバーすることができないほど、多くの戦略と経験が手を判断することになります。
入力
すべてのカードには一意の識別子があります。最初の部分はスーツ(C lubs、S pades、H earts、D iamonds)、2番目の部分はこのマッピングで与えられる値です:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
両方の部分を組み合わせて1つのカードを形成します。値が最初に来て、次にスーツが来ます。あなたが望むように、あなたはどんな形式ででもカードを取るかもしれません。
出力
ハンドがプレイ可能な場合、ゲームの値と選択したトランプスーツを出力します(順序は関係ありません)。そうでない場合は、「pass」を出力します。
ルール
- 前述のように、最も便利な形式で入力を取得できます。テストケースの例を以下に示します。
- 入力は、コマンドライン引数、ユーザー入力、または関数引数によって提供されます。
- 出力は戻り値として提供されるか、画面に印刷されるだけです。
- 入力のカードは、いかなる方法でも注文できません。あなたのプログラムは、ランダムなカード注文を処理できる必要があります。
- 最も少ないバイト数が勝ちます!
テストケース
テストケースの入力は、2文字の文字列のリストです。
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
説明:
- クラブを切り札とする2つのジャック。したがって、ゲームの価値は3 x 12 = 36です
- トランプとしてスペードで行方不明の3つのジャック。したがって、ゲームの価値は4 x 11 = 44です
- 最大4枚の切り札しか使用できないため、合格します。
- スペードを使用し、非トランプエースを使用しない6枚の切り札。
一部のルールが不明確な場合は、先に進んでコメントしてください。私はこのゲームで育ったので、すべてを十分に詳しく説明したかどうかを判断するのは難しいです。
そして今... ハッピーコーディング!
編集:コメントで指摘したように(isaacgに感謝)、4つのジャックを「ジャックファクター」に入れた後、次のトップトランプをカウントするルールがあります。そして、人々を混乱させないために、私が最初に提案したルールはそのままです。したがって、最大係数は5のままです。