Zagraj w Best Card w Euchre


13

Wejście:

Po pierwsze
Tablica trzech kart reprezentujących karty zagrane przez każdego gracza sformatowane w podobny sposób

[JD][TH][9S]

Reprezentowanie

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

Ponieważ zawsze siedzisz naprzeciwko swojego kolegi z drużyny w Euchre, drugi element reprezentuje grę twojego kolegi z drużyny. Tutaj TH.

Po drugie,
pojedynczy znak, ciąg itp. Reprezentujący sformatowany kolor atutowy

S, D, C, H

reprezentujący

Spades, Diamonds, Clubs, Hearts

Po trzecie, tablica czterech kart reprezentujących twoją rękę sformatowaną jak

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

reprezentujący

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

Cel:

Biorąc pod uwagę trzy wejścia, wypisz najlepszą możliwą kartę, aby dodać ją do kart, które zostały zagrane, tak aby spełniała następujące kryteria:

  1. Bierze rękę, jeśli może, jeśli nie, wypuści najmniej wartościową kartę
  2. Jeśli to możliwe, bierze rękę, jednak nie przebije twojego kolegi z drużyny, chyba że jest to nieuniknione
  3. Jeśli może wziąć rękę, robi to za pomocą najmniej wartościowej karty. (Jeśli masz asa i królową, które mogą wygrać rozdanie, grasz królową).
  4. Każda gra musi być zgodna z wymaganiami, zgodnie z zasadami na dole.

Format wyjściowy jak [JD]

Formatowanie

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

Przykłady

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

Na zewnątrz: 9H

Powód: Ponieważ kluby są atutem, 9C wygrywa rozdanie, nie możemy wziąć ręki, więc powinniśmy odrzucić naszą najniższą kartę, tutaj 9H

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

Na zewnątrz: 9H

Powód: Ponieważ serca są atutem, as z diamentów wygrywa obecnie rękę, jesteśmy w stanie przebijać rękę, więc powinniśmy użyć naszej najniższej karty, tutaj 9H

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

Na zewnątrz: 9D

Powód: Ponieważ diamenty są atutem i obecnie wygrywamy rozdanie, powinniśmy zagrać w 9D, ponieważ nasz partner wygrywa obecnie rozdanie, więc chcemy zagrać 9DnadAD

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

Na zewnątrz: QH

Powód: Ponieważ Diamenty są atutem, nasi przeciwnicy wygrywają lewą JHaltaną Mamy prawą altanę, ale nie możemy jej atutem, ponieważ QH było prowadzone i musimy podążać za nią,QH

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

Na zewnątrz: JD

Powód: Ponieważ diamenty są atutem, nasi przeciwnicy wygrywają lewą JHaltaną Mamy prawą altanę, a ponieważ jej nie Diamondsmamy, możemy atutować goJD

Mocne strony karty Euchre

Jeśli kier jest atutem:

JH
JD
AH
KH
QH
TH
9H

Zobacz Zasady Euchre, jeśli nie znasz siły różnych kart w Euchre

Ponieważ jest to Code-Golf, wygrywa najkrótszy kod!

Powodzenia i miłej zabawy!


2
Myślę, że spektakl powinien być opisany tutaj nie linkiem.
Jonathan Allan

@JonathanAllan Myślałem o tym, ale lepiej to opisać w linku. Prawdopodobnie nie jest to najlepsze wyzwanie dla tych, którzy nie znają gry. Chyba że chcą się uczyć w locie.
jacksonecac

Przykład z 9Dwynikiem ma serca ustawione jako atuty (choć nie sądzę, żeby miało to wpływ na ten wynik).
Jonathan Allan

@JonathanAllan nice catch, dziękuję.
jacksonecac

1
@jacksonecac dzięki za problem, dobrze się z tym bawiłem.
Dave

Odpowiedzi:


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

Jak to działa

Wypróbuj online!

Najpierw odczytuje argumenty i znajduje ubranie lewego bauera (walet tego samego koloru co atut) z wyszukiwaniem skrótów:

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

Następnie łączy wszystkie karty w jeden ciąg i wykonuje pewne zamiany, dzięki czemu karty naturalnie sortują się w odpowiedniej kolejności dla 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/\]\[/,$_;

Na końcu tego bloku ciąg kart jest następnie dzielony na nawiasy, co tworzy tablicę wszystkich kart, w których:

  • indeks 0 = wiodąca karta przeciwnika

  • indeks 1 = karta członka drużyny

  • indeks 2 = karta innego przeciwnika

  • wskaźniki 3-6 reprezentują rękę

Kolor wiodący jest analizowany od pierwszej karty, ale kolor zmienia się na „0”, aby reprezentować atut, jeśli atut był prowadzony:

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

Najlepsze karty w grze można znaleźć, sortując pierwsze trzy karty i wydobywając pierwszą kartę:

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

Znaleziono grywalne karty. Jeśli jakieś karty w ręce pasują do koloru wiodącego, wówczas pozostają tylko te karty. W przeciwnym razie wszystkie karty są uważane za grywalne:

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

Kartę „wyrzuconą” można znaleźć, zwracając ostatnią kartę z posortowanej tablicy możliwych do gry kart:

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

Najniższą „zwycięską” kartę, która może wygrać lewę, można znaleźć, dodając najwyższą kartę w grze do szeregu kart do gry, sortując tablicę i iterując ją, aż zostanie znaleziona najwyższa karta w grze. „Zwycięską” kartą jest karta z poprzedniej iteracji:

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

Następnie oceniana jest poprawna gra. Karta „jednorazowa” jest wybierana, jeśli spełniony jest jeden z poniższych warunków:

  1. Najlepsza karta na stole ma indeks 1 w nieposortowanej tablicy wszystkich kart, co oznacza, że ​​należy ona do naszego członka drużyny
  2. Poszukiwanie najniższej „zwycięskiej” karty było zerowe, co oznacza, że ​​najlepsza karta naszego przeciwnika jest wyższa niż wszystkie karty w ręce

W przeciwnym razie zwracana jest „zwycięska” karta:

$_=$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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.