Verwandte: Nennen Sie die Pokerhand
Ein Straight Flush ist eine Pokerhand, die fünf aufeinanderfolgende Karten derselben Farbe enthält. Als Teil eines Straight Flushs kann ein Ass entweder über einem König oder unter einer Zwei stehen. Ein Ass kann entweder einen hohen Rang haben (z. B. A ♥ K ♥ Q ♥ J ♥ 10 ♥ ist ein Straight Flush mit einem hohen Ass) oder einen niedrigen Rang (z. B. 5 ♦ 4 ♦ 3 ♦ 2 ♦ A ♦ ist ein Straight Flush mit fünf Höhen) kann nicht in derselben Hand sowohl hoch als auch niedrig rangieren (zB Q ♣ K ♣ A ♣ 2 ♣ 3 ♣ ist ein Flush mit Ass-Höhe, kein Straight Flush).
Herausforderung
Gegebene N
Karten (in jedem vernünftigen Format) geben einen Wahrheitswert aus, wenn ein Straight Flush in der Pokerhand enthalten ist.
Eingang
N
Anzahl der Karten. (In jedem vernünftigen Format)
Es gibt vier Anzüge; Herzen, Pik, Diamanten und Keulen (H, S, D, C)
.
Jede Farbe hat eine Karte für die Nummern 2 bis 10 sowie 4 'Bild'-Karten, Ass, Bube, Dame und König (A, J, Q, K)
Hinweis: Sie können 10 als T nehmen
Ausgabe
Truthy/Falsy
Wert
Testfall
["AS", "2S", "3S", "4S", "5S"] => true
["3D", "9C", "4S", "KH", "AD", "AC"] => false
["5D", "6D", "7D", "8H", "9D", "10D", "JD"] => false
["JC", "7C", "5D", "8C", "AC", "10C", "9C", "5S"] =>true
[] => false
["AS", "2S", "3S"] => false
["JC", "QC", "KC", "AC", "2C"] => false
[ "2H", "3H", "4H", "5H", "6H", "7H"] => true
Standard Code-Golf .
Gewinnkriterien: Kürzester Code in jeder Sprache
quelle
10
als nehmenT
?Antworten:
Python 2 , 95 Bytes
Probieren Sie es online!
Es gibt 40 mögliche Straight Flushes, die einfach alle überprüft werden. Chas Brown sparte 2 Bytes; Jo King sparte 4 weitere.
quelle
A
an beiden Enden so glaube ich, zu ändern ,36
um40
es beheben soll.R ,
128 1269491 BytesProbieren Sie es online!
Ursprüngliche Logik durch @ J.Doe erheblich verkürzt.
Bildet eine 26x26-Matrix mit größtenteils Unsinn, aber allen Karten (mit den Assen, die unten wiederholt werden), die in den Zeilen 10 bis 23 der Spalten 3, 4, 8 und 24 enthalten sind. Die Matrix wird durch Verketten aller Kombinationen der Großbuchstaben erstellt Alphabet mit den Buchstaben J bis X ersetzt durch A, 2-9, T, J, Q, K, A, S über
chartr
. Wir bekommen C, D, H gratis!Das
%in%
glättet die Matrix spaltenweise in einen Vektor. Prüfen Sie dann, ob die Lauflängencodierung für eine Reihe vonTRUE
Übereinstimmungen größer als 4 ist .quelle
rle
ANDouter
! Dies spart zwei Bytesouter
Aufrufs, der viele ungültige Karten erzeugt, und Verwenden des Vektorkräfts vonin
, um zu vermeidenapply
. Sie müssen beide vorhanden sein, damit dies funktioniert!JavaScript (ES6), 116 Byte
Probieren Sie es online!
Wie?
Für jeden Anzug wandeln wir alle Karten c der Anzug s in eine 14-Bit - Bit - Maske ms c s m , doppelte Bit # 13 (Ace) zu Bit # 0 das zu handhaben Stahlrad (A, 2,3,4,5) und Zählung die Anzahl aufeinanderfolgender Bits. Wenn es größer als 4 ist, haben wir einen Straight Flush.
quelle
Brachylog , 31 Bytes
Probieren Sie es online!
quelle
Retina 0.8.2 , 66 Bytes
Probieren Sie es online! Erläuterung:
Wandeln Sie die Bildkarten in ihre Werte um.
A
kann 1 oder 14 sein.Konvertieren Sie den Wert in "unary" und setzen Sie ein Suffix, damit die Karten richtig sortiert werden.
Kombiniere 5 Karten, die jedes Mal um 1 erhöht werden und stelle sicher, dass die letzte Erhöhung genau 1 war.
quelle
JavaScript (ES6), 106 Byte
Akzeptiert eine Reihe von Zeichenfolgendarstellungen von Karten und ersetzt diese
10
durchT
. Probieren Sie es online!Erläuterung
Durchläuft jede Karte und setzt ein Flag in einem Array von Booleschen Werten, wobei ein Index verwendet wird, der aus der eindeutigen Kombination von Rang und Farbe berechnet wird. Dieses Array wird dann verkettet, um den Abgleich eines Musters von 5 aufeinanderfolgenden Wahrheitswerten zu ermöglichen.
Beispielsweise kann eine Hand mit einem Straight Flush Folgendes als Teil der vollständigen Zeichenfolgendarstellung des booleschen Arrays erzeugen:
,,,,1,1,1,1,1,,,,
Da der erste Rangwert (dh A) vom Anfang der Zeichenfolge abweicht, werden immer leere Werte vor allen Werten
1
im Array angezeigt, wodurch sichergestellt wird, dass die Zeichenfolgendarstellung mit a beginnt,
quelle
Java 10,
189167165164160157156 BytesNimmt die Eingabe als einzelne durch Leerzeichen getrennte Zeichenfolge (d. H
"AS 2S 3S 4S 5S"
).-22 Bytes dank @ OlivierGrégoire .
-1 Byte dank @AlexRacer .
Probieren Sie es online aus.
Golfed-Version des Codes, den ich für Project Euler # 54 verwendet habe , das ich hauptsächlich mit regulären Ausdrücken gemacht habe (zum Spaß und um mehr über reguläre Ausdrücke zu erfahren). Ohne reguläre Ausdrücke wäre es wahrscheinlich besser für die Leistung und einfacher gewesen (gilt wahrscheinlich auch für das Golfen dieser Antwort; wird später noch genauer betrachtet).
Erläuterung:
Zusätzliche Regex-Erklärung:
"AKQJT98765432A".substring(i,i+5)
Nimmt fünf benachbarte Karten basierend aufi
.replaceAll(".","(?=.*$0\\\\1)")
ersetzt jede dieser Karten mit"(?=.*c\\1)"
(woc
ist der Kartencharakter).replaceFirst(".1","([HSDC])")
wird dann die erste\\1
durch ersetzen([HSDC])
.Dh die gesamte Regex des Straight Flush für Karten im Wert-Bereich zu überprüfen ,
[9,5]
wird werden:^(?=.*9([HSDC]))(?=.*8\\1)(?=.*7\\1)(?=.*6\\1)(?=.*5\\1).*$
(Hinweis:
String#matches
implizit fügt den nachlauf / führende^...$
. Die gesamte Zeichenfolge zu überprüfen) Diese Regex wird:quelle
".*"+
Präfix entfernt.f
break
zui=-2
und die Rückkehr zurreturn-1>i;
Verwendung Ihres Ansatzes änderte (und 2 weitere, die sich(.)
zu.
und$1
zu änderten$0
). :)Sauber ,
145135 BytesProbieren Sie es online!
Vereinfacht:
quelle
Japt , 37 Bytes
Übernimmt die Eingabe als 2D-Array.
Versuch es
Erläuterung
quelle
Jelly , 18 Bytes
Probieren Sie es online!
[..., ...]
Ausgabeformat: Leere Liste als falsch, nicht leere Liste als wahr.
quelle
PHP , 264 Bytes
Es schallt,
1
wenn es ein Straight Flush ist und0
odernull
nicht.Wenn Sie die Datei benennen
1X
, können Sie sie speichern11 bytes
da Sie sie nicht ändern müssen$argv[0]
. Ich bin mir im Moment nicht sicher, warum der Dateiname ihn beschädigen kann.Aus irgendeinem Grund werden die Zeichenfolgen in TIO
:;<=>
vor den Zeichenfolgen0123456789
nach sortiertasort
, obwohl sie:;<=>
die ASCII-Werte 58-62 und0123456789
die ASCII-Werte 48-57 haben. Wenn Sie also den Code vom TIO-Link oder darunter nehmen und PHPTester mit der folgenden Testsuite verwenden, funktioniert es.TIO-Code
Probieren Sie es online!
quelle
Kotlin , 226 Bytes
Verwendet T für 10, damit alle Karten 2 Zeichen lang sind.
Probieren Sie es online!
quelle
Pascal (FPC) ,
223216210209 BytesProbieren Sie es online!
Verwendet
T
für 10. Eingang enthält 1 Karte pro Zeile.Jetzt habe ich so viel Golf gespielt, dass ich nicht mehr weiß, wie es funktioniert ...
Erläuterung:
quelle