Gioca a Best Card in Euchre


13

Ingresso:

In primo luogo
un array di tre carte che rappresentano le carte giocate da ciascun giocatore formattato come

[JD][TH][9S]

Che rappresentano

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

Mentre ti siedi sempre di fronte al tuo compagno di squadra in Euchre, il secondo elemento rappresenta il gioco del tuo compagno di squadra. Qui, il TH.

In secondo luogo,
un singolo carattere, stringa, ecc. Che rappresenta il seme di briscola formattato come

S, D, C, H

che rappresentano

Spades, Diamonds, Clubs, Hearts

In terzo luogo un array di quattro carte che rappresentano la tua mano formattata come

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

che rappresentano

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

Obbiettivo:

Dati i tre input, ottieni la migliore carta possibile da aggiungere alle carte che sono state giocate in modo tale da soddisfare i seguenti criteri:

  1. Prende la mano se può, se non emette la carta meno preziosa
  2. Prende la mano se può, tuttavia non vincerà il tuo compagno di squadra a meno che non sia inevitabile
  3. Se può prendere la mano, lo fa usando la carta meno preziosa. (Se hai un asso e una regina che possono vincere la mano, giochi la regina).
  4. Ogni gioco deve seguire l'esempio come richiesto dalle regole in fondo.

Formato di output come [JD]

Formattazione

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

Esempi

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

Su: 9H

Motivo: poiché i club sono in briscola, la 9C sta vincendo la mano, non siamo in grado di prendere la mano, quindi dovremmo scartare la nostra carta più bassa, qui il 9H

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

Su: 9H

Motivo: poiché Hearts ha la briscola, l'asso di quadri sta vincendo la mano, siamo in grado di vincere la mano, quindi dovremmo usare la nostra carta più bassa, qui il 9H

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

Su: 9D

Motivo: poiché i diamanti sono vincenti e attualmente stiamo vincendo la mano, dovremmo giocare la 9D perché il nostro partner attualmente sta vincendo la mano, quindi vogliamo giocare 9DoltreAD

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

Su: QH

Motivo: poiché i diamanti sono vincenti, i nostri avversari vincono con il JHpergolato sinistro. Abbiamo il pergolato destro ma non possiamo vincerlo perché il QH è stato guidato e dobbiamo seguire l'esempio, ilQH

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

Su: JD

Motivo: poiché i diamanti sono vincenti, i nostri avversari stanno vincendo con il JHpergolato sinistro. Abbiamo il pergolato giusto e dato che non Diamondsabbiamo, possiamo battere su di lui con ilJD

Punti di forza di Euchre Card

Se Hearts è vincente:

JH
JD
AH
KH
QH
TH
9H

Vedi le Regole di Euchre se non hai familiarità con la forza di diverse carte in Euchre

Poiché questo è Code-Golf vince il codice più corto!

Buona fortuna e buon divertimento!


2
Penso che il gioco dovrebbe essere descritto qui non con un link.
Jonathan Allan,

@JonathanAllan Ci ho pensato, ma è meglio descritto nel link. Probabilmente non è la migliore sfida per coloro che non hanno familiarità con il gioco. A meno che non vogliano imparare al volo.
jacksonecac,

L'esempio con 9Dcome risultato ha i cuori impostati come briscole (anche se non penso che influisca su questo risultato).
Jonathan Allan,

@JonathanAllan bella cattura, grazie.
jacksonecac,

1
@jacksonecac grazie per il problema, mi sono divertito.
Dave,

Risposte:


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

Come funziona

Provalo online!

Prima legge args e trova la tuta del bauer sinistro (jack dello stesso colore di Trump) con una ricerca di hash:

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

Quindi combina tutte le carte in una stringa e fa alcune sostituzioni, facendo sì che le carte si dispongano naturalmente nell'ordine corretto per 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/\]\[/,$_;

Alla fine di questo blocco, la stringa di carte viene quindi divisa tra parentesi, che crea un array di tutte le carte in cui:

  • indice 0 = carta guida dell'avversario

  • indice 1 = carta del compagno di squadra

  • indice 2 = carta dell'altro avversario

  • gli indici 3-6 rappresentano la mano

Il seme principale viene analizzato dalla prima carta, ma il seme cambia in "0" per rappresentare la briscola se la briscola è stata portata:

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

La migliore carta in gioco si trova ordinando le prime tre carte e recuperando la prima carta:

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

Si trovano le carte giocabili. Se le carte in mano corrispondono al seme di piombo, rimangono solo quelle carte. Altrimenti tutte le carte sono considerate giocabili:

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

La carta 'usa e getta' viene trovata restituendo l'ultima carta nella matrice ordinata di carte giocabili:

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

La carta "vincente" più bassa che può vincere la presa si trova aggiungendo la carta più alta in gioco alla serie di carte giocabili, ordinando la matrice e iterando su di essa fino a trovare la carta più alta in gioco. La carta "vincente" è la carta della precedente iterazione:

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

Viene quindi valutata la riproduzione corretta. La carta 'usa e getta' viene scelta se si verifica una delle seguenti condizioni:

  1. La migliore carta sul tavolo ha un indice di 1 nella matrice non ordinata di tutte le carte, il che significa che appartiene al nostro compagno di squadra
  2. La ricerca della carta "vincente" più bassa è risultata nulla, il che significa che la migliore carta del nostro avversario è superiore a tutte le carte in mano

Altrimenti viene restituita la carta "vincente":

$_=$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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.