O blackjack , também conhecido como vinte e um, é um jogo de cartas comparativo entre você e um dealer, onde cada jogador, por sua vez, compete contra o dealer, mas os jogadores não jogam entre si.
O jogo é o seguinte, o carteador oferece uma carta. O revendedor então negocia uma carta com a face para baixo. O revendedor, então, oferece outro cartão. Por fim, o revendedor negocia uma carta com a face para cima.
Desafio
Seu desafio é escrever um programa (ou função) que, quando executado (ou chamado), gera (ou devolve) a probabilidade de que a próxima carta que o carteador lhe dê, o faça parar, o que significa a pontuação acumulada de cartas em sua mão após o revendedor oferece outro cartão com mais de 21 anos.
Entrada
As três cartas visíveis em jogo. São as duas cartas que você tem na sua mão e a única que pode ser vista na mão do dealer. Isso pode estar no formato que você achar adequado para o seu aplicativo.
Existem 52 cartas em um baralho (4 de cada uma das cartas abaixo). O valor dos cartões é o seguinte:
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
No Blackjack, um ás pode contar como 1 ou 11. No nosso desafio, conte apenas como 1
Resultado
A probabilidade, em um formato de proporção ou porcentagem, de que a próxima carta que sacaremos nos fará perder.
Você pode gerar a porcentagem, a fração ou apenas o numerador da fração.
Exemplos
Neste exemplo, as duas primeiras cartas estão na nossa mão, a terceira é a carta visível do dealer
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 ...
Regras
As brechas padrão não são permitidas.
Isso é código-golfe , então o código mais curto em bytes para cada idioma vence!
fonte
Respostas:
Geléia ,
2624 bytesUm link monádico que aceita uma lista de caracteres (usando a opção minúscula OU a opção maiúscula com
1
forA
) que retorna o numerador (o número de 49 th ) em[0,49]
.Experimente online! Ou veja a suíte de testes
Quão?
Observe que, usando minúsculas, o mínimo de 10 e o módulo ordinal por 48 fornecem os valores do cartão. O mesmo vale para maiúsculas
T
,J
,Q
,K
e1
para um ás, como mostrado à direita (mas uma maiúsculaA
não funciona):fonte
JavaScript (ES6),
7362 bytesRecebe a entrada como uma matriz de 3 caracteres com
1
ases. Retorna o número inteiro X que representa a probabilidade X / 49 de ser eliminada.Experimente online!
Ensaio exaustivo
A fórmula do golfe não é muito intuitiva. Portanto, a maneira mais fácil de provar sua consistência é provavelmente apenas comparar todas as saídas possíveis com as fornecidas por uma implementação básica não-armazenada:
Experimente online!
fonte
.map(n=>b-=n+b>52,b+=c-32)
faz em geral? Eu não estou muito familiarizado com JS de.map
e tentando entender o que a vírgula faz aqui .. Inicialmente I embora seja uma variante mais curta.map(n=>{b-=n+b>52;b+=c-32})
ou algo .. Eu seia=>([b,c]=a.map(v=>v*4||40))
convertidos['1','2','Q']
para[ 4, 8, 40 ]
, em seguida, ele faz um loop sobre esses três valores, ondeb
é o primeiro valor ec
é o segundo (se bem entendi). Mas estou um pouco confuso sobre.map(n=>b+=(n+b<53)-1,b+=c-32)
(se o primeirob-=
é alterado parab+=
) vs.map(n=>b+=(n+b<53)-33+c)
..b
= primeiro valor,c
= segundo valor em[4, 8, 40]
e ob-=n+b>52
modificac
também se for a segunda iteração? Nesse caso, a combinação de ambosb-=
eb+=
em um únicob+=
(oub-=
) não funcionará por causa disso?b+=c-32
é um parâmetro (não utilizado) demap()
e é avaliado apenas uma vez antes da primeira iteração.n=>b-=n+b>52
é a função de retorno de chamada (o 1º parâmetro demap()
) e é chamada em cada iteração. Tecnicamente,map()
aceita um segundo parâmetro (chamado thisArg ), mas isso é irrelevante aqui: queremos apenas que esse trecho de código seja executado antes do início do loop.Pitão, 35 bytes
Recebe a entrada como uma lista de caracteres (ou como uma sequência).
Experimente aqui
Explicação
fonte
Perl 5 , 115 bytes
Experimente online!
fonte
Python 2 ,
9796 bytesExperimente online!
Pega uma string de 3 caracteres como entrada, com '1' sendo usado como Ace. Retorna o numerador.
fonte
Java 8, 109 bytes
Porta da resposta JavaScript (ES6) de @Arnauld .
Entrada como matriz de caracteres com três valores, Aces como
'1'
; saída é a probabilidadep
emp/49
.Experimente online.
Explicação:
fonte
05AB1E , 46 bytes
Experimente online!
Isso pode ser feito melhor, trabalhando nisso.
fonte
05AB1E ,
232221 bytesExperimente online!
fonte