Ihre Aufgabe ist es, herauszufinden, wie viele verschiedene Blackjack-Sequenzen in einer geordneten Liste von 12 Karten enthalten sind.
Eine Blackjack-Sequenz ist definiert als eine Sequenz aufeinanderfolgender Karten, deren Punktesumme genau 21 beträgt. Die Punkte werden gemäß der folgenden Tabelle gezählt:
Symbol | Name | Points Symbol | Name | Points
-------+-------+-------- -------+-------+--------
2 | Two | 2 9 | Nine | 9
3 | Three | 3 T | Ten | 10
4 | Four | 4 J | Jack | 10
5 | Five | 5 Q | Queen | 10
6 | Six | 6 K | King | 10
7 | Seven | 7 A | Ace | 1 or 11
8 | Eight | 8
Eingang
Eine 12-stellige Zeichenfolge mit den oben beschriebenen Symbolen. Die Farben der Karten sind uns egal, daher werden sie nicht mitgeliefert.
Beispiel:
K6K6JA3Q4389
Ausgabe
Die Anzahl der verschiedenen Blackjack-Sequenzen, die in der Eingabezeichenfolge enthalten sind.
Beispiel:
K6K6JA3Q4389
beinhaltet zwei verschiedene Blackjack-Sequenzen:
JA
, wobei das Ass als 11 Punkte gezählt wird (10 + 11 = 21)A3Q43
, wobei das Ass als 1 Punkt gezählt wird (1 + 3 + 10 + 4 + 3 = 21)
Die Antwort wäre also 2
.
Regeln
- Zwei Blackjack-Sequenzen werden als unterschiedlich betrachtet, wenn sie unterschiedliche Karten oder die gleichen Karten in unterschiedlicher Reihenfolge enthalten. Erscheint die exakt gleiche Sequenz an unterschiedlichen Stellen in der Eingabeliste, muss sie nur einmal gezählt werden.
- Die Blackjack-Sequenzen können sich überlappen.
- Jede Art von Karte kann bis zu 12 Mal in der Sequenz vorkommen. (Wir gehen davon aus, dass die Karten aus mindestens 3 verschiedenen Decks stammen.)
- Wenn die Eingabezeichenfolge keine Blackjack-Sequenz enthält, müssen Sie
0
einen Wert oder einen anderen falschen Wert zurückgeben. - Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind verboten.
Testfälle
Die Sequenzen werden zu Informationszwecken bereitgestellt, aber Sie müssen nur die Anzahl der Sequenzen ausgeben.
Input | Output | Distinct sequences
-------------+--------+--------------------------------------------------------
3282486Q3362 | 0 | (none)
58A24JJ6TK67 | 1 | 8A2
Q745Q745Q745 | 1 | Q74
AAAAAAAAAAAA | 1 | AAAAAAAAAAA
T5AQ26T39QK6 | 2 | AQ, 26T3
JQ4A4427464K | 3 | A442, 44274, 7464
Q74Q74Q74Q74 | 3 | Q74, 74Q, 4Q7
37AQKA3A4758 | 7 | 37A, 37AQ, AQ, AQK, QKA, KA, A3A475
TAQA2JA7AJQA | 10 | TA, TAQ, AQ, QA, A2JA7, 2JA7A, JA, AJ, AJQ, JQA
TAJAQAKAT777 | 13 | TA, TAJ, AJ, JA, JAQ, AQ, QA, QAK, AK, KA, KAT, AT, 777
quelle
Antworten:
Gelee ,
3029 BytesProbieren Sie es online! oder schauen Sie sich die Testsuite an
Wie?
Beachten Sie, dass, wenn wir ein Ass immer als 1 bewerten, die einzigen gültigen Summen 21 und 11 sind , wobei letztere akzeptabel sind, wenn ein Ass in der Sequenz erscheint.
quelle
Python 2, 215 Bytes
Kommentare hinzugefügt:
quelle
Python ,
134130 BytesProbieren Sie es online!
Wie?
Eine unbenannte Funktion, die die Zeichenfolge der Länge 12 als annimmt
x
.x[i:j]
ist ein Teil der Zeichenfolge vom i + 1- ten bis zum j- ten Zeichen.Slices werden so genommen, dass wir alle Unterlisten durchlaufen, indem wir von
i=0
nachi=11
mit gehenfor i in range(12)
, für jede von denen wir vonj=0
nachj=12
mit gehenfor j in range(13)
.(Wir brauchen nur
j=i+1
und bis, aber Slices mitj<=i
sind nur leere Zeichenfolgen, so dass wir 4 Bytes ab Golf spielen können.for j in range(i+1,13)
)Diese werden nach denen mit der richtigen Summe gefiltert ...
Gültige Summen sind 11 und 21, wenn ein Slice ein Ass enthält, oder nur 21, wenn nicht.
'A'in x[i:j]
gibt uns diese Informationen und~(v)
führt-1-v
, die wir Scheibe verwenden[11,21]
- also wenn ein Ass in der Folge ist , dass wir bekommen ,[11,21][-2:]
und wenn wir nicht bekommen[11,21][-1:]
in, was[11,21]
und[21]
jeweils.Die Summe selbst zu behandeln , muss
A
als 1, Zahlen als Werte, undT
,J
,Q
, undK
als 10. Diese Zuordnung von ersten Gußstück ordinals erreicht:" 2 3 4 5 6 7 8 9 T J Q K A"
(ohne Leerzeichen) wird[50, 51, 52, 53, 54, 55, 56, 57, 84, 74, 81, 75, 65]
, 48 subtrahieren zu erhalten[ 2, 3, 4, 5, 6, 7, 8, 9, 36, 26, 33, 27, 17]
, die Einnahmemin
mit 26 Ausbeute[ 2, 3, 4, 5, 6, 7, 8, 9, 26, 26, 26, 26, 17]
, und mod (%
) sechzehn diejenigen sind[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1]
, als für die Summe erforderlichsum(...)
.Die gefilterten Ergebnisse werden mit in eine Menge eingefügt
{...}
, sodass nur die eindeutigen Ergebnisse übrig bleiben und die Längelen(...)
die Zählung istquelle
05AB1E ,
393837 BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 123 Byte
quelle
0
fürAAAAAAAAAAAA
statt1
. (A
kann gleichzeitig 1 und 11 sein)s=>eval("q=new Set;for(i=0;s[i];i++)for(t=A=0,j=i;c=s[j++];t==21|t==11&A&&q.add(s.slice(i,j)))t+=+c||(c<'B'?A=1:10);q.size")
124 BytesJavaScript (ES6),
144138129128126124 ByteAlter Versuch bei 128:
quelle
s.search`A`>-1
könnte sein~s.search`A`
-2
und1&-2 == 0
t
auf0
im.slice(0,-1)
Anruf setzen (spart 2B)?t
es sich um eine globale Variable handelt und sie wegen des Aufrufs von zurückgesetzt würdef(s.slice(0,-1))
. Aber ich habe einen Ausweg gefundens.search`A`>-1
:-)JavaScript (ES6), 112 Byte
Diese Codelogik ähnelt derjenigen, die in vorhandenen JS-Antworten von ETHproductions und Neil verwendet wird . Es wird jedoch ein einfaches Array verwendet, um die aufgetretenen Blackjack-Sequenzen zu verfolgen, anstatt eines
Set
.Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
05AB1E ,
40 39 38 3736 Bytes-4 Danke an Emigna
Probieren Sie es online!
Wir müssen das Dekrementieren -> Teilzeichenfolge -> Inkrementieren ausführen, damit Bildkarten durch eine einstellige Zahl dargestellt werden.
quelle
S
währendÇ
die Zeichenfolge in eine Liste von Zeichencodes umgewandelt wird."SIPJ"
könnte„èµJu
„
in der Dokumentation verwenden soll.Ç<çJŒÙ'@0:)vy„èµJuS9:S>D1å2‚T*>sOå}O
Sie es umschreiben als Dann sind Sie 1 Byte kürzer als meine Antwort :)Bash + Unix-Dienstprogramme,
145142141 BytesProbieren Sie es online!
Testläufe:
quelle
PHP, 240 Bytes
Ungolfed:
Probieren Sie es hier aus!
quelle
$i
nicht deklariert wurde. 4 Bytes hinzugefügt und es funktioniert einwandfrei.