ユーカーでベストカードをプレイ


13

入力:

まず
、各プレイヤーが次のようにフォーマットされたカードを表す3枚のカードの配列

[JD][TH][9S]

表現する

Jack of Diamonds, 10 of Hearts, and Nine of Spades.

ユーカーでは常にチームメイトの向かいに座っているため、2番目の要素はチームメイトのプレーを表しています。ここで、TH

次に
、次のようにフォーマットされたトランプスーツを表す単一の文字、文字列など

S, D, C, H

代表する

Spades, Diamonds, Clubs, Hearts

第三に、次のようにフォーマットされたあなたの手を表す4枚のカードの配列

[KD][JC][QH][AS]

代表する

King of Diamonds, Jack of Clubs, Queen of Hearts, Ace of Spades

目的:

3つの入力が与えられたら、次の基準を満たすように、プレイされたカードに追加するための最良のカードを出力します。

  1. 可能であれば手がかかり、出力されない場合は最も価値の低いカード
  2. できれば手がかかりますが、やむを得ない場合を除き、チームメイトに勝ちません。
  3. 手札を取ることができる場合、最も価値の低いカードを使用して行います。(ハンドに勝てるエースとクイーンがいる場合、クイーンをプレイします)。
  4. プレイはすべて、下部のルールで要求されているとおりに行わなければなりません。

のような出力形式 [JD]

書式設定

A - Ace
K - King
Q - Queen
J - Jack
T - Ten
9 - Nine

H - Hearts
D - Diamonds
S - Spades
C - Clubs

TH, 9D, JD, QH, AD, 9C, TC

では:[QD][KD][9C]"C"[AH][JH][QH][9H]

でる: 9H

理由:クラブがトランプであり、9Cがハンドに勝っているので、ハンドを取ることができないので、ここで最も低いカードを捨てる必要があります。 9H

では:[QD][KD][AD]"H"[AH][JH][QH][9H]

でる: 9H

理由:ハートがトランプであるため、Ace of Diamondsが現在ハンドに勝っています。ハンドをトランプすることができるので、ここで最も低いカードを使用する必要があります。 9H

では:[QD][KD][TD]"D"[AD][JH][QH][9D]

でる: 9D

理由:ダイヤモンドは切り札であり、現在ハンドを獲得しているので、パートナーが現在ハンドを獲得しているので、9Dをプレイする必要9Dがあります。AD

では:[QH][KH][JH]"D"[AD][JD][QH][9D]

でる: QH

理由:ダイヤモンドがトランプなので、対戦相手は左のバウアーで勝ちJHます。右のバウアーはいますが、QHがリードされたので、彼を倒すことはできません。QH

では:[QH][KH][JH]"D"[AD][JD][QC][9D]

でる: JD

理由:ダイヤモンドがトランプなので、対戦相手は左のバウアーで勝ちJHます。右のバウアーがありDiamondsます。JD

ユーカーカードの強み

ハートが切り札の場合:

JH
JD
AH
KH
QH
TH
9H

あなたが別のカードの強さに慣れていない場合ユーカールールを参照してくださいユーカー

これはCode-Golfなので、最短のコードが勝ちです!

頑張って楽しんでね!


2
ここでは、リンクを使用せずにプレイを説明する必要があると思います。
ジョナサンアラン

@JonathanAllan私はそれについて考えましたが、リンクでよりよく説明されています。おそらく、ゲームに不慣れな人にとっては最高の挑戦ではありません。彼らがその場で学びたいのでなければ。
jacksonecac

9D結果としての例では、ハートが切り札に設定されています(この結果に影響はないと思います)
ジョナサンアラン

@JonathanAllanすてきなキャッチ、ありがとう。
jacksonecac

1
@jacksonecac問題をありがとう、私はそれを楽しんでいた。
デイブ

回答:


2

Perl- 557532511490482384 363

($p,$t,$h)=@ARGV;%L=(H=>D,D=>H,C=>S,S=>C);$B=%L{$t};$_="\]$p$h\[";s/(.$t)/0$1/g;s/J$B/01$B/;s/0J/00/;s/J/R/g;s/9/Z/g;($T,@C)=split/\]\[/,$_;$s=$C[0];$s=~s/.+(.)/$1/;$s=~s/$t/0/;$X=(sort@C[0..2])[0];@M=@C[3..6];@F=(grep{/$s/}@M);@M=@F if@F;$w=(sort@M)[@M-1];push@M,$X;foreach$g(sort@M){$g ne$X?$b=$g:last}$_=$C[1]eq$X||!$b?$w:$b;s/.(..)/$1/;s/Z/9/;s/0|1|R/J/;print

使い方

オンラインでお試しください!

まず、argsを読み取り、ハッシュルックアップで左バウアーのスーツ(トランプと同じ色のジャック)を見つけます。

($p,$t,$h)=@ARGV;
%L=(H=>D,D=>H,C=>S,S=>C);
$B=%L{$t};

次に、すべてのカードを1つの文字列に結合し、いくつかの置換を行って、カードを自然に正しい順序でソートします。

$_="\]$p$h\[";
s/(.$t)/0$1/g; # trump cards start with '0'
s/J$B/01$B/;   # left-bauer's 'J' changes to '01', making it trump
s/0J/00/;      # right-bauer's 'J' changes to '0'
s/J/R/g;       # all other jacks have 'J' changed to 'R'
s/9/Z/g;       # all 9s change to Z
($T,@C)=split/\]\[/,$_;

このブロックの最後で、カード文字列はブラケットで分割され、すべてのカードの配列が作成されます。

  • インデックス0 =相手のリードカード

  • インデックス1 =チームメイトのカード

  • インデックス2 =他の相手のカード

  • インデックス3-6は手を表します

リードスーツは最初のカードから解析されますが、トランプがリードされた場合、スーツは「0」に変わり、トランプを表します。

$s=$C[0];
$s=~s/.+(.)/$1/;
$s=~s/$t/0/;

プレイ中の最高のカードは、最初の3枚のカードをソートして最初のカードを取得することで見つかります。

$X=(sort@C[0..2])[0];

プレイ可能なカードが見つかりました。手持ちのカードがリードスーツと一致する場合、それらのカードのみが残ります。それ以外の場合、すべてのカードはプレイ可能と見なされます。

@M=@C[3..6];
@F=(grep{/$s/}@M);
@M=@F if@F;

「スローアウェイ」カードは、ソートされたプレイ可能なカードの配列の最後のカードを返すことで見つかります。

$w=(sort@M)[@M-1];

トリックに勝つことができる最低の「勝ち」カードは、プレイ可能なカードの配列にインプレイの最高のカードを追加し、配列をソートし、インプレイの最高のカードが見つかるまでそれを繰り返すことによって見つけられます。「勝利」カードは、前の反復からのカードです。

push@M,$X;
foreach$g(sort@M){$g ne$X?$b=$g:last}

その後、正しいプレイが評価されます。次のいずれかに該当する場合、「使い捨て」カードが選択されます。

  1. テーブル上の最高のカードのインデックスは、すべてのカードの並べ替えられていない配列で1です。つまり、チームメイトのものです。
  2. 最も低い「勝った」カードの検索が無効になりました。これは、対戦相手の最高のカードが手札のすべてのカードよりも高いことを意味します

それ以外の場合、「勝利」カードが返されます。

$_=$C[1]eq$X||!$b?$w:$b;
s/.(..)/$1/; # remove the '0' that indicated trump
s/Z/9/;      # get those 9s back
s/0|1|R/J/;  # fix the jacks
print
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.