Le Blackjack , également connu sous le nom de vingt et un ans, est un jeu de cartes comparatif entre vous et un croupier, où chaque joueur à son tour rivalise avec le croupier, mais les joueurs ne jouent pas les uns contre les autres.
Le jeu se déroule comme suit, le croupier vous offre une carte. Le croupier se donne ensuite une carte, face cachée. Le croupier vous offre alors une autre carte. Enfin, le croupier se donne une carte face visible.
Défi
Votre défi consiste à écrire un programme (ou une fonction) qui, lorsqu'il est exécuté (ou appelé), génère (ou renvoie) la probabilité que la prochaine carte que le croupier vous donne vous fera exploser, ce qui signifie le score cumulé des cartes dans votre main après le croupier vous donne une autre carte a plus de 21 ans.
Contribution
Les trois cartes visibles en jeu. Ce sont les deux cartes que vous avez en main et la carte à un visage que vous pouvez voir dans la main du croupier. Cela peut être dans le format que vous jugez approprié pour votre application.
Il y a 52 cartes dans un jeu (4 de chacune des cartes ci-dessous). La valeur des cartes est la suivante:
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
Au Blackjack, un as peut compter comme 1 ou 11. Dans notre défi, ne le compte que comme 1
Production
La probabilité, sous forme de rapport ou de pourcentage, que la prochaine carte que nous piocherons nous fera exploser.
Vous pouvez afficher le pourcentage, la fraction ou simplement le numérateur de la fraction.
Exemples
Dans cet exemple, les deux premières cartes sont dans notre main, la troisième carte est la carte visible du croupier
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 ...
Règles
Les échappatoires standard ne sont pas autorisées.
Il s'agit de code-golf , donc le code le plus court en octets pour chaque langue gagne!
la source
Réponses:
Gelée ,
2624 octetsUn lien monadique acceptant une liste de caractères (en utilisant soit l'option minuscule OU l'option majuscule avec
1
pourA
) qui renvoie le numérateur (le nombre de 49 ème ) en[0,49]
.Essayez-le en ligne! Ou consultez la suite de tests
Comment?
Notez qu'en utilisant des minuscules, le minimum de 10 et les ordinaux modulo par 48 donnent les valeurs de la carte. De même pour les majuscules
T
,J
,Q
,K
et1
pour un as, comme indiqué sur le droit (mais une majusculeA
ne fonctionne pas):la source
JavaScript (ES6),
7362 octetsPrend l'entrée sous forme de tableau de 3 caractères avec
1
pour les as. Renvoie l'entier X représentant la probabilité que X / 49 soit cassé.Essayez-le en ligne!
Test exhaustif
La formule golfée n'est pas très intuitive. Ainsi, le moyen le plus simple de prouver sa cohérence est probablement de simplement comparer toutes les sorties possibles avec celles fournies par une implémentation de base non golfée:
Essayez-le en ligne!
la source
.map(n=>b-=n+b>52,b+=c-32)
en général? Je ne suis pas trop familier avec de JS.map
et d' essayer de comprendre ce que la virgule fait ici .. Au début , je pensais que c'est une variante plus courte.map(n=>{b-=n+b>52;b+=c-32})
ou quelque chose .. Je saisa=>([b,c]=a.map(v=>v*4||40))
convertis['1','2','Q']
à[ 4, 8, 40 ]
, puis il passe en boucle sur ces trois valeurs, oùb
est la première valeur , etc
est le deuxième (si je comprends bien). Mais je suis un peu confus à propos de.map(n=>b+=(n+b<53)-1,b+=c-32)
(si le premierb-=
est changé enb+=
) vs.map(n=>b+=(n+b<53)-33+c)
..b
= première valeur,c
= deuxième valeur dans[4, 8, 40]
, et leb-=n+b>52
modifiec
également si c'est la deuxième itération? Dans quel cas, combiner les deuxb-=
etb+=
en un seulb+=
(oub-=
) ne fonctionnera pas à cause de cela?b+=c-32
est un paramètre (inutilisé) demap()
et n'est évalué qu'une seule fois avant la première itération.n=>b-=n+b>52
est la fonction de rappel (le 1er paramètre demap()
) et est appelée à chaque itération. Techniquement,map()
accepte un 2e paramètre (appelé thisArg ), mais ce n'est pas pertinent ici: nous voulons juste que ce morceau de code soit exécuté avant le début de la boucle.Pyth, 35 octets
Prend la saisie sous forme de liste de caractères (ou sous forme de chaîne).
Essayez-le ici
Explication
la source
Perl 5 , 115 octets
Essayez-le en ligne!
la source
Python 2 ,
9796 octetsEssayez-le en ligne!
Prend une chaîne de 3 caractères en entrée, «1» étant utilisé comme as. Renvoie le numérateur.
la source
Java 8, 109 octets
Port de la réponse JavaScript (ES6) de @Arnauld .
Entrez comme tableau de caractères avec trois valeurs, As comme
'1'
; sortie est la probabilitép
enp/49
.Essayez-le en ligne.
Explication:
la source
05AB1E , 46 octets
Essayez-le en ligne!
Cela peut être mieux fait en travaillant dessus.
la source
05AB1E ,
232221 octetsEssayez-le en ligne!
la source