Nazwij rękę pokera
Biorąc pod uwagę pięć kart, wypisz nazwę ręki pokera, która będzie jedną z:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
W razie wątpliwości zapoznaj się z zasadami na stronie http://en.wikipedia.org/wiki/List_of_poker_hands .
Wkład
5 kart z argumentów standardowego lub wiersza poleceń. Karta to dwuliterowy ciąg znaków w formularzu RS
, w którym R jest rangą, a S - kolorem. W szeregi są 2
- 9
(karty), numer T
(dziesięć), J
(Jack), Q
(Queen), K
(King), A
(ACE). Te stroje są S
, D
, H
, C
dla pik, karo, kier i klubów odpowiednio.
Przykład kart
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Przykład wejścia => pożądany wynik
3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house
Zasady
Najkrótszy kod wygrywa
Edytować
Jak dotąd świetnie wygląda! Naprawdę nie mogę zweryfikować wszystkich odpowiedzi, ponieważ nie znam tych języków zbyt dobrze i nie mam kompilatorów / tłumaczy dla wszystkich, ale podejrzewam, że nie wszyscy myśleli o tym, że Asy mogą być zarówno najwyższe, jak i najniższe karty strita (kolor) .
Odpowiedzi:
GolfScript (
209 208 207 206 200 199 197196 znaków)Korzystam z oferowanej swobody modyfikowania wielkich liter: mój Straight Flush i Royal Flush kapitalizują Flush, aby ponownie użyć słowa z prostego koloru.
Uwaga: niektóre wcześniejsze wersje były błędne: wspierały full house tylko wtedy, gdy para miała niższą wartość niż para royal. Można je poprawić, zastępując spację oddzielającą
- 0
ją$
.Próbny
źródło
.&
do znajdowania różnych znaków w ciągu jest bardzo przydatną sztuczką.Przyszedł z własną odpowiedzią :)
Python -
312301298Tworzy listę 2x2, w której indeksy dwóch wymiarów są wartościami logicznymi dla koloru i koloru prostego. W przypadku obu sprawdzamy, czy jest to poker królewski, czy tylko strit. Aby nie mieć koloru ani pokera, sprawdzamy inne układy:
m
in
przechowujemy najwyższą i drugą najwyższą liczbę kart o tej samej wartości; nazwy rąk są przechowywane na liście z indeksami wedługm
. Kontrole cząstkowe w ramach wartości tej listy są przeprowadzane wn
celu oddzielenia jednej pary z dwóch par i trzech z domu.Edycja: Dzięki Nolen Royality za zapisanie łącznie 20 znaków!
źródło
m,n=g([c.count(x)for x in set(r)])
nam,n=g(map(c.count,set(r)))
?Ruby 1.9 (
427359348338296292)EDYCJA : Naprawiono do pracy z niskimi asami.
Podstawową ideą jest zbudowanie tablicy ilości kart w każdej randze, połączenie cyfr w ciąg znaków, a następnie uruchomienie wyrażeń regularnych, aby sprawdzić, który kształt pasuje. Bieżemy liczbę różnych kolorów, aby ustalić, czy sprawdzić to z różnymi kolorami (kolor, kolor prosty, kolor królewski) lub z innymi kształtami (wszystko inne).
Bierze karty jako osobne argumenty wiersza poleceń, takie jak:
źródło
C, 454 znaków
Uruchom z wiersza poleceń z kartami jako argumentami, np ./a.out 8C 3H 8S 8H 3S
Wersja rozszerzona z komentarzami:
Edycje:
źródło
Mathematica , 365
Oto moje zdanie na temat odpowiedzi Davida Carrahera.
Pokazane z białą przestrzenią dla pewnej czytelności.
Wersja jednoliniowa:
źródło
_
Zamiast{_,_,_,_}
K,
294295.
edycja: Dodano 1 znak dla niskich asów
źródło
Python
334,326322 ZnakiWiem, że ostatnia linijka staje się dość nieczytelna, gdy będę zadowolony z mojego rozwiązania, założę wersję bez gry w golfa.
źródło
GolfScript,
258250 znakówProgram oczekuje wejścia na STDIN, jak podano powyżej, i wyjścia na STDOUT. Możesz sam przetestować kod .
Edycja: uwzględniono sugestie w0lf.
źródło
" of a kind"
zmienną, ponieważ jest ona używana dwukrotnie."Straight"
AH KH 2C 3H 4H
jest uważany za prosty, ale powinien mieć wysoką kartę.Mathematica -
500494465 znakówTo rozwiązanie jest oparte na pokerze demonstrowanej przez Eda Pegga, Jr. W tej wersji karty są traktowane wewnętrznie jak liczby
Range[2,14]
Przykładowe wejścia, wyjścia:
Uwagi:
f: kolor
c: karty (bez koloru)
s: prosty
t: {karty, apartamenty}
re:
źródło
JH 4C 2C JD TH
?