El Blackjack , también conocido como veintiuno, es un juego de cartas de comparación entre usted y un crupier, donde cada jugador compite a su vez contra el crupier, pero los jugadores no juegan entre sí.
El juego es el siguiente, el crupier te reparte una carta. El crupier se reparte una carta boca abajo. El crupier le reparte otra carta. Luego, finalmente, el crupier se reparte una carta boca arriba.
Desafío
Su desafío es escribir un programa (o función) que cuando se ejecuta (o se llama), genera (o devuelve) la probabilidad de que la próxima carta que le dé el crupier lo haga quebrar, lo que significa la puntuación acumulada de cartas en su mano después el crupier le da otra tarjeta que tenga más de 21 años.
Entrada
Las tres cartas visibles en juego. Son las dos cartas que tienes en tu mano, y la carta de una cara que puedes ver en la mano del crupier. Esto puede estar en cualquier formato que considere adecuado para su aplicación.
Hay 52 cartas en una baraja (4 de cada una de las cartas a continuación). El valor de las tarjetas son las siguientes:
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
En Blackjack, un as puede contar como 1 u 11. En nuestro desafío, solo contar como 1
Salida
La probabilidad, en un formato de proporción o porcentaje, de que la próxima carta que robemos nos haga reventar.
Puede generar el porcentaje, la fracción o simplemente el numerador de la fracción.
Ejemplos
En este ejemplo, las dos primeras cartas están en nuestra mano, la tercera carta es la carta visible del crupier
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 ...
Reglas
Las lagunas estándar no están permitidas.
Este es el código de golf , por lo que gana el código más corto en bytes para cada idioma.
fuente
Respuestas:
Jalea ,
2624 bytesUn enlace monádico aceptar una lista de caracteres (utilizando ya sea la opción de menor caso o la opción mayúscula con
1
paraA
) que devuelve el numerador (el número de 49 º S) en[0,49]
.Pruébalo en línea! O ver el conjunto de pruebas
¿Cómo?
Tenga en cuenta que al usar minúsculas, el mínimo de 10 y el módulo de ordinales en 48 da los valores de la tarjeta. Lo mismo ocurre con mayúsculas
T
,J
,Q
,K
y1
de un as, como se muestra a la derecha (pero una mayúsculaA
no funciona):fuente
JavaScript (ES6),
7362 bytesToma la entrada como una matriz de 3 caracteres con
1
para ases. Devuelve el entero X que representa la probabilidad de que X / 49 se rompa.Pruébalo en línea!
Prueba exhaustiva
La fórmula de golf no es muy intuitiva. Por lo tanto, la forma más fácil de demostrar su consistencia es probablemente comparar todos los resultados posibles con los proporcionados por una implementación básica sin protección:
Pruébalo en línea!
fuente
.map(n=>b-=n+b>52,b+=c-32)
en general? No estoy muy familiarizado con los JS.map
y estoy tratando de entender qué hace la coma aquí. Inicialmente, pensé que es una variante más corta.map(n=>{b-=n+b>52;b+=c-32})
o algo así. Sé que sea=>([b,c]=a.map(v=>v*4||40))
convierte['1','2','Q']
a[ 4, 8, 40 ]
, y luego recorre estos tres valores, ¿dóndeb
está el primer valor? , yc
es el segundo (si lo entiendo correctamente). Pero estoy un poco confundido sobre.map(n=>b+=(n+b<53)-1,b+=c-32)
(si el primerob-=
se cambia ab+=
) vs.map(n=>b+=(n+b<53)-33+c)
..b
= primer valor,c
= segundo valor en[4, 8, 40]
, y elb-=n+b>52
modificac
también si es la segunda iteración? ¿En qué caso combinar ambosb-=
yb+=
formar uno solob+=
(ob-=
) no funcionará por eso?b+=c-32
es un parámetro (no utilizado)map()
y se evalúa solo una vez antes de la primera iteración.n=>b-=n+b>52
es la función de devolución de llamada (el primer parámetro demap()
) y se llama en cada iteración. Técnicamente,map()
acepta un segundo parámetro (llamado thisArg ), pero esto es irrelevante aquí: solo queremos que este fragmento de código se ejecute antes de que comience el ciclo.Pyth, 35 bytes
Toma la entrada como una lista de caracteres (o como una cadena).
Pruébalo aquí
Explicación
fuente
Perl 5 , 115 bytes
Pruébalo en línea!
fuente
Python 2 ,
9796 bytesPruébalo en línea!
Toma una cadena de 3 caracteres como entrada, con '1' como As. Devuelve el numerador.
fuente
Java 8, 109 bytes
Puerto de la respuesta de JavaScript de @Arnauld (ES6) .
Entrada como conjunto de caracteres con tres valores, Ases como
'1'
; salida es la probabilidadp
enp/49
.Pruébalo en línea.
Explicación:
fuente
05AB1E , 46 bytes
Pruébalo en línea!
Esto se puede hacer mejor, trabajando en ello.
fuente
05AB1E ,
232221 bytesPruébalo en línea!
fuente