Nennen Sie die Pokerhand
Geben Sie bei fünf Karten den Namen der Pokerhand aus, die eine der folgenden sein wird:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
Im Zweifelsfall lesen Sie die Regeln unter http://en.wikipedia.org/wiki/List_of_poker_hands .
Eingang
5 Karten mit Standard- oder Befehlszeilenargumenten. Eine Karte ist eine aus zwei Buchstaben bestehende Zeichenfolge auf dem Formular RS
, wobei R für Rang und S für Farbe steht. Die Ränge sind 2
- 9
(Zahlenkarten), T
(zehn), J
(Bube), Q
(Dame), K
(König), A
(Ass). Die Anzüge sind S
, D
, H
, C
für Pik, Karo, Herz und Clubs sind.
Beispiel von Karten
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Eingabebeispiel => gewünschte Ausgabe
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
Regeln
Kürzester Code gewinnt
Bearbeiten
Sieht soweit super aus! Ich kann nicht wirklich alle Antworten überprüfen, da ich diese Sprachen nicht sehr gut kenne und keine Compiler / Interpreter für alle von ihnen habe, aber ich vermute, dass nicht jeder darüber nachgedacht hat, dass Asse sowohl die höchsten als auch die besten sein können die niedrigsten Karten einer Straße (Flush) .
Antworten:
GolfScript (
209 208 207 206 200 199 197196 Zeichen)Ich nutze die angebotene Freiheit, um die Großschreibung zu optimieren: Mein Straight Flush und mein Royal Flush aktivieren beide Flush, um das Wort aus dem einfachen Flush wiederzuverwenden.
Hinweis: Einige frühere Versionen waren fehlerhaft: Sie unterstützten Full House nur, wenn das Paar einen niedrigeren Wert hatte als das Paar Royal. Sie können korrigiert werden, indem der Trennungsraum
- 0
durch a ersetzt wird$
.Demo
quelle
.&
Finden der verschiedenen Zeichen in einer Zeichenfolge ist ein sehr nützlicher Trick.Kam mit einer Antwort von mir selbst :)
Python -
312301298Erstellt eine 2x2-Liste, in der die Indizes der beiden Dimensionen boolesche Prüfungen für Flush und Straight sind. In beiden Fällen prüfen wir, ob es sich um einen Royal Flush oder nur um einen Straight Flush handelt. Für nicht Flush und nicht Straight prüfen wir die anderen Hände:
m
undn
halten die höchste und zweithöchste Anzahl gleichrangiger Karten; Die Namen der Zeiger werden in einer Liste mit Indizes nach gespeichertm
. Unterprüfungen innerhalb der Werte dieser Liste werden durchgeführt,n
um ein Paar von zwei Paaren und drei Gleiche von Haus zu trennen.Bearbeiten: Danke Nolen Royality für insgesamt 20 Zeichen gespeichert!
quelle
m,n=g([c.count(x)for x in set(r)])
anm,n=g(map(c.count,set(r)))
?Ruby 1.9 (
427359348338296292)BEARBEITEN : Problem behoben, bei dem mit niedrigen Assen gearbeitet wurde.
Die Grundidee besteht darin, ein Array der Kartenmenge in jedem Rang aufzubauen, die Ziffern zu einer Zeichenfolge zu verknüpfen und dann reguläre Ausdrücke auszuführen, um festzustellen, welche Handform passt. Wir zählen die Anzahl der verschiedenen Farben, um festzustellen, ob sie mit den verschiedenen Farben (Flush, Straight Flush, Royal Flush) oder mit den anderen Farben (alles andere) verglichen werden sollen.
Nimmt die Karten wie folgt als separate Befehlszeilenargumente:
quelle
C 454 Zeichen
Führen Sie die Befehlszeile mit Karten als Argumenten aus, z. B. ./a.out 8C 3H 8S 8H 3S
Erweiterte Version mit Kommentaren:
Bearbeitungen:
quelle
Mathematica , 365
Hier ist meine Sichtweise auf die Antwort von David Carraher.
Zur besseren Lesbarkeit mit Leerzeichen dargestellt.
Einzeilige Version:
quelle
_
anstelle von{_,_,_,_}
K
294295.
Bearbeiten: Es wurde 1 Buchstabe für Geraden mit niedrigem Ass hinzugefügt
quelle
Python
334,326322 ZeichenIch weiß, dass der letzte Liner ziemlich unleserlich wird. Ich werde eine Version ohne Golf spielen, wenn ich mit meiner Lösung zufrieden bin.
quelle
GolfScript,
258250 ZeichenDas Programm erwartet die Eingabe auf STDIN wie oben angegeben und gibt sie auf STDOUT aus. Sie können den Code selbst testen .
Edit: Vorschläge von w0lf übernommen.
quelle
" of a kind"
eine Variable eingeben , da diese zweimal verwendet wird."Straight"
AH KH 2C 3H 4H
Wird als Straight angesehen, sollte aber High-Karte sein.Mathematica -
500494465 ZeichenDiese Lösung basiert auf einer Poker-Demonstration von Ed Pegg, Jr. In dieser Version werden die Karten intern als Zahlen in behandelt
Range[2,14]
Beispieleingänge, Ausgänge:
Anmerkungen:
f: spülen
c: Karten (ohne Farbe)
s: gerade
t: {Karten, Suiten}
d:
quelle
JH 4C 2C JD TH
?