Jouer la meilleure carte à Euchre

13

Contribution:

Tout d'abord
un tableau de trois cartes représentant les cartes jouées par chaque joueur formatées comme

[JD][TH][9S]

Représentant

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

Comme vous vous asseyez toujours en face de votre coéquipier à Euchre, le deuxième élément représente le jeu de votre coéquipier. Ici, le TH.

Deuxièmement,
un seul caractère, chaîne, etc. représentant le costume d'atout formaté comme

S, D, C, H

représentant

Spades, Diamonds, Clubs, Hearts

Troisièmement, un tableau de quatre cartes représentant votre main formatée comme

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

représentant

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

Objectif:

Compte tenu des trois entrées, sortez la meilleure carte possible à ajouter aux cartes qui ont été jouées de sorte qu'elle réponde aux critères suivants:

  1. Il prend la main s'il le peut, sinon sort la carte la moins précieuse
  2. Il prend la main s'il le peut, mais il ne l'emportera pas sur votre coéquipier à moins qu'il ne soit inévitable
  3. S'il peut prendre la main, il le fait en utilisant la carte la moins précieuse. (Si vous avez un as et une reine qui peuvent gagner la main, vous jouez la reine).
  4. Tous les jeux doivent suivre le mouvement requis par les règles du bas.

Format de sortie comme [JD]

Mise en page

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

Exemples

Dans: [QD][KD][9C], "C",[AH][JH][QH][9H]

En dehors: 9H

Raison: comme les clubs sont atouts, le 9C gagne la main, nous ne pouvons pas prendre la main donc nous devons défausser notre carte la plus basse, ici le 9H

Dans: [QD][KD][AD], "H",[AH][JH][QH][9H]

En dehors: 9H

Raison: les coeurs étant des atouts, l'as de diamant gagne actuellement la main, nous sommes en mesure de l'emporter donc nous devons utiliser notre carte la plus basse, ici le 9H

Dans: [QD][KD][TD], "D",[AD][JH][QH][9D]

En dehors: 9D

Raison: comme les diamants sont des atouts et que nous gagnons actuellement la main, nous devrions jouer le 9D parce que notre partenaire gagne actuellement la main, donc nous voulons jouer au- 9Ddessus duAD

Dans: [QH][KH][JH], "D",[AD][JD][QH][9D]

En dehors: QH

Raison: comme les diamants sont atouts, nos adversaires gagnent avec le tonneau gauche JHNous avons le tonneau droit mais nous ne pouvons pas le surpasser parce que QH a été mené etQH

Dans: [QH][KH][JH], "D",[AD][JD][QC][9D]

En dehors: JD

Raison: comme les diamants sont atouts, nos adversaires gagnent avec le tonneau gauche JHNous avons le tonneau droit et comme nous n'en Diamondsavons pas, nous pouvons l'emporter sur lui avec leJD

Points forts de la carte Euchre

Si Hearts est un atout:

JH
JD
AH
KH
QH
TH
9H

Consultez les règles d'Euchre si vous n'êtes pas familier avec la force des différentes cartes dans Euchre

Puisque c'est Code-Golf, le code le plus court gagne!

Bonne chance et amusez-vous bien!

jacksonecac
la source
2
Je pense que le jeu devrait être décrit ici pas avec un lien.
Jonathan Allan
@JonathanAllan J'y ai pensé, mais c'est mieux décrit dans le lien. Probablement pas le meilleur défi pour ceux qui ne connaissent pas le jeu. Sauf s'ils veulent apprendre à la volée.
jacksonecac
L'exemple avec 9Dcomme résultat a des coeurs définis comme atouts (bien que je ne pense pas que cela affecte ce résultat).
Jonathan Allan
@JonathanAllan belle prise, merci.
jacksonecac
1
@jacksonecac merci pour le problème, je me suis amusé avec.
Dave

Réponses:

2

Perl - 557 532 511 490 482 384 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

Comment ça fonctionne

Essayez-le en ligne!

Tout d'abord, il lit les arguments et trouve le costume de gaucher (jack de la même couleur que Trump) avec une recherche de hachage:

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

Ensuite, il combine toutes les cartes en une seule chaîne et effectue quelques remplacements, ce qui fait que les cartes sont naturellement triées dans l'ordre correct pour euchre:

$_="\]$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/\]\[/,$_;

À la fin de ce bloc, la chaîne de carte est ensuite divisée sur les crochets, ce qui crée un tableau de toutes les cartes où:

  • index 0 = carte principale de l'adversaire

  • index 1 = carte du coéquipier

  • index 2 = carte de l'autre adversaire

  • les indices 3-6 représentent la main

La couleur principale est analysée à partir de la première carte, mais la couleur passe à «0» pour représenter l'atout si l'atout a été mené:

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

La meilleure carte en jeu est trouvée en triant les trois premières cartes et en récupérant la première carte:

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

Les cartes jouables sont trouvées. Si des cartes en main correspondent à la couleur principale, alors seules ces cartes restent. Sinon, toutes les cartes sont considérées comme jouables:

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

La carte «jetable» est trouvée en retournant la dernière carte dans le tableau trié de cartes jouables:

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

La carte `` gagnante '' la plus basse qui peut gagner l'astuce est trouvée en ajoutant la carte la plus élevée en jeu au tableau de cartes jouables, en triant le tableau et en l'itérant jusqu'à ce que la carte en jeu la plus élevée soit trouvée. La carte «gagnante» est la carte de l'itération précédente:

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

Le jeu correct est ensuite évalué. La carte «jetable» est choisie si l'une des conditions suivantes est vraie:

  1. La meilleure carte sur la table a un index de 1 dans le tableau non trié de toutes les cartes, ce qui signifie qu'elle appartient à notre coéquipier
  2. La recherche de la carte gagnante la plus basse s'est révélée nulle, ce qui signifie que la meilleure carte de notre adversaire est plus élevée que toutes les cartes de la main

Sinon, la carte «gagnante» est retournée:

$_=$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
Dave
la source