Blackjack , auch bekannt als einundzwanzig, ist ein Kartenspiel zwischen Ihnen und einem Dealer, bei dem jeder Spieler seinerseits gegen den Dealer antritt, die Spieler jedoch nicht gegeneinander spielen.
Das Spiel läuft wie folgt ab, der Dealer gibt Ihnen eine Karte. Der Dealer gibt sich dann verdeckt eine Karte aus. Der Dealer gibt Ihnen dann eine weitere Karte. Dann gibt sich der Dealer selbst eine offene Karte.
Herausforderung
Ihre Herausforderung besteht darin, ein Programm (oder eine Funktion) zu schreiben, das beim Ausführen (oder Aufrufen) die Wahrscheinlichkeit ausgibt (oder zurückgibt), dass die nächste Karte, die der Dealer Ihnen gibt, Sie pleite macht, was die kumulierte Punktzahl der Karten in Ihrer Hand danach bedeutet Der Dealer gibt Ihnen eine andere Karte ist über 21.
Eingang
Die drei sichtbaren Karten im Spiel. Dies sind die zwei Karten, die Sie auf der Hand haben, und die eine Bildkarte, die Sie in der Hand des Händlers sehen können. Dies kann in jedem Format erfolgen, das Sie für Ihre Anwendung für geeignet halten.
Es gibt 52 Karten in einem Deck (4 von jeder der Karten unten). Der Wert der Karten ist wie folgt:
Symbol(Case Insensitive) Name Value
2 Two 2
3 Three 3
4 Four 4
5 Five 5
6 Six 6
7 Seven 7
8 Eight 8
9 Nine 9
T Ten 10
J Jack 10
Q Queen 10
K King 10
A or 1 Ace 1
Beim Blackjack kann ein Ass als 1 oder 11 zählen. In unserer Herausforderung zählen Sie es nur als 1
Ausgabe
Die Wahrscheinlichkeit, dass die nächste Karte, die wir ziehen, in einem Verhältnis- oder Prozentformat dazu führt, dass wir pleite gehen.
Sie können den Prozentsatz, den Bruch oder nur den Zähler des Bruchs ausgeben.
Beispiele
In diesem Beispiel sind die ersten beiden Karten in unserer Hand, die dritte Karte ist die sichtbare Karte des Händlers
Input -> Output
A 2 Q -> 0.00% or 0/49 or 0
A 2 3 -> 0.00% or 0/49 or 0
T T T -> 91.84% or 45/49 or 91.84
T J K -> 91.84% or 45/49 or 45
9 7 3 -> 61.22% or 30/49 ...
9 7 Q -> 59.18% or 29/49 ...
Regeln
Standardlücken sind nicht erlaubt.
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes für jede Sprache!
quelle
Antworten:
Gelee ,
2624 BytesA monadischen Link eine Liste von Zeichen (unter Verwendung entweder die Kleine Option oder die Großbuchstabe Option Akzeptieren
1
fürA
) , die den Zähler zurückkehrt (die Anzahl des 49 - ten n) in[0,49]
.Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an
Wie?
Beachten Sie, dass bei Verwendung von Kleinbuchstaben das Minimum von 10 und die Ordnungszahlen modulo von 48 die Kartenwerte ergeben. Das gleiche gilt für Großbuchstaben
T
,J
,Q
,K
und1
für ein Ass, wie auf der rechten Seite (aber ein Ober FallA
nicht funktioniert):quelle
JavaScript (ES6),
7362 ByteNimmt die Eingabe als Array von 3 Zeichen mit
1
für Asse auf. Gibt die Ganzzahl X zurück, die die Wahrscheinlichkeit darstellt, dass X / 49 gesprengt wird.Probieren Sie es online aus!
Vollständiger Test
Die Golfformel ist nicht sehr intuitiv. Der einfachste Weg, um seine Konsistenz zu beweisen, besteht wahrscheinlich darin, alle möglichen Ergebnisse mit denen zu vergleichen, die von einer einfachen Implementierung ohne Wolf bereitgestellt werden:
Probieren Sie es online aus!
quelle
.map(n=>b-=n+b>52,b+=c-32)
man im Allgemeinen? Ich bin nicht allzu vertraut mit JS ist.map
und zu versuchen , zu verstehen , was das Komma hier tut .. Am Anfang dachte ich , es eine kürzere Variante ist.map(n=>{b-=n+b>52;b+=c-32})
oder etwas .. Ich weißa=>([b,c]=a.map(v=>v*4||40))
Konvertiten['1','2','Q']
zu[ 4, 8, 40 ]
, und dann in einer Schleife es in diesen drei Werten, wobeib
der erste Wert undc
ist die zweite (wenn ich richtig verstehe). Aber ich bin ein bisschen verwirrt über.map(n=>b+=(n+b<53)-1,b+=c-32)
(wenn der ersteb-=
geändert wirdb+=
) gegen.map(n=>b+=(n+b<53)-33+c)
..b
= erster Wert,c
= zweiter Wert in[4, 8, 40]
, und dasb-=n+b>52
ändert sichc
auch, wenn es die zweite Iteration ist? In welchem Fall funktioniert es aus diesem Grund nicht , beideb-=
undb+=
zu einem einzigenb+=
(oderb-=
) zu kombinieren ?b+=c-32
ist ein (nicht verwendeter) Parameter vonmap()
und wird vor der ersten Iteration nur einmal ausgewertet.n=>b-=n+b>52
ist die Rückruffunktion (der 1. Parameter vonmap()
) und wird bei jeder Iteration aufgerufen.map()
Akzeptiert technisch gesehen einen zweiten Parameter ( thisArg genannt ), aber dies ist hier irrelevant: Wir möchten nur, dass dieser Code ausgeführt wird, bevor die Schleife beginnt.Pyth, 35 Bytes
Nimmt die Eingabe als Liste von Zeichen (oder als Zeichenfolge) auf.
Probieren Sie es hier aus
Erläuterung
quelle
Perl 5 , 115 Bytes
Probieren Sie es online aus!
quelle
Python 2 ,
9796 BytesProbieren Sie es online aus!
Nimmt eine 3-stellige Zeichenfolge als Eingabe, wobei '1' als Ass verwendet wird. Gibt den Zähler zurück.
quelle
Java 8, 109 Bytes
Port der JavaScript (ES6) -Antwort von @Arnauld .
Eingabe als Zeichenarray mit drei Werten, Asse als
'1'
; Ausgabe ist die Wahrscheinlichkeitp
inp/49
.Probieren Sie es online aus.
Erläuterung:
quelle
05AB1E , 46 Bytes
Probieren Sie es online aus!
Dies kann besser gemacht werden, wenn man daran arbeitet.
quelle
05AB1E ,
232221 BytesProbieren Sie es online aus!
quelle