Wyzwanie:
Biorąc pod uwagę dwa pięciokartowe układy, określ, które z nich wygrywają, poprzez standardowy ranking układów pokera .
Wejście:
Dziesięć kart oddzielonych spacjami od standardowego wejścia lub jako argumenty wiersza poleceń, w zależności od tego, co wolisz. Pierwsze pięć kart to ręka Gracza 1, a ostatnie pięć to Ręka Gracza 2. Każda karta będzie dwuliterowym ciągiem postaci RS, w której R ma rangę, a S ma kolor. Rangi wahają się od 2-9, T dla dziesięciu oraz J, Q, K i A odpowiednio dla Jacka, Królowej, Króla i Asa. Kolorami są odpowiednio H, D, C, S dla kier, karo, trefl i pik. Musisz podać numer zwycięskiego gracza: „1” lub „2”.
Przykłady kart:
AS - the Ace of Spades
QD - the Queen of Diamonds
2C - the Two of Clubs
TH - the Ten of Hearts
Przykłady danych wejściowych:
5H 5C 6S 7S KD 2C 3S 8S 8D TD -> 2
Objaśnienie: Gracz 1 ma parę piątek, podczas gdy gracz 2 ma parę ósemek.
5D 8C 9S JS AC 2C 5C 7D 8S QH -> 1
Objaśnienie: Żaden z graczy nie ma nic specjalnego, ale najwyższą kartą gracza 1 jest as, a wysoką kartą gracza 2 jest królowa.
2D 9C AS AH AC 3D 6D 7D TD QD -> 2
Objaśnienie: Gracz 1 ma trzy asy, gracz 2 ma kolor diamentów.
4D 6S 9H QH QC 3D 6D 7H QD QS -> 1
Objaśnienie: Obaj gracze mają parę królowych, ale drugą najwyższą kartą Gracza 1 jest Dziewiątka, a Gracza 2 Siódemka.
Zasady i wyjaśnienia:
- Szczegółowe informacje na temat porównywania rąk można znaleźć w standardowym rankingu rąk pokerowych .
- Możesz założyć, że w każdej parze nie ma powtarzających się kart.
- Możesz założyć, że w każdym przypadku jest określony zwycięzca.
- Kolor nie bierze udziału w rankingu ręki. Na przykład dwa królewskie kolory w różnych kolorach są równe (w związku z tym wszelkie dane wejściowe, w których obaj gracze mają kolor królewski, są nieważne zgodnie z powyższą regułą).
- Ponieważ jest to kod golfowy, wygrywa najkrótsza odpowiedź.
Uwagi:
- Powiązane z tym pytaniem i tym .
- Na podstawie projektu Euler Problem 54
Odpowiedzi:
Haskell -
352339 znakówDziała:
Ungolf'd i skomentował, dzięki czemu można zobaczyć technikę:
źródło
Python -
774722707698685 znakówPostanowiłem wygenerować ciąg znaków dla każdej reprezentującej go ręki, zaczynając od znaku dla rodzaju ręki, po którym następują znaki opisujące konkretną odmianę rodzaju (na przykład, którą kartę miałeś 4 z?), A następnie wartości pozostałych kart w przypadku remisu (jeśli obaj gracze mają tę samą podwójną parę, piąta karta będzie musiała zdecydować, kto wygra). Testowałem to dość obszernie, ale tak naprawdę nie gram w pokera, więc mam nadzieję, że mam rację. Wiem też, że nie jest jeszcze w pełni golfa, prawdopodobnie później mogę zgolić kilkadziesiąt znaków.
źródło
_=lambda c:chr(97+c)
. Ponadto masz trochę niepotrzebnych białych znaków po:
s i=
s. Na koniec użyj;
zamiast nowych wierszy do oddzielenia instrukcji, aby zmniejszyć białe znaki używane do wcięć.JavaScript -
526508stosowanie:
bez golfa:
źródło
źródło
perl,
801733 znakówUważam, że jest to dość prosta implementacja. Zasadniczo dla każdej ręki sortujemy kolory i twarze osobno. Następnie tworzymy kolejną kopię twarzy z asami liczącymi niskie, abyśmy mogli sprawdzić stritów z niskimi asami. Następnie ustalamy, czy mamy kolor, czy strit i jaka jest wysoka karta. Następnie sprawdzamy tylko mecze w kolejności punktacji (najpierw sprawdzamy, czy są to kolory, a potem cztery rodzaje itp.). Rzeczywisty wynik jest tylko połączeniem rodzaju ręki, po której następuje wartość nominalna kart w kolejności, w jakiej się liczą (to _s () w wersji bez golfa, u () w wersji golfowej). Oto on:
A oto odpowiednik mniej golfa:
źródło
AH 2C 3S 4S 5D 6C 7S 7C 7D TD
daje wynik2
, ale myślę, że strita bije trójkę