Sua tarefa é descobrir quantas seqüências distintas de Blackjack podem ser encontradas em uma lista ordenada de 12 cartas.
Uma sequência de Blackjack é definida como uma sequência de cartas consecutivas cuja soma de pontos é exatamente 21. Os pontos são contados de acordo com a tabela a seguir:
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
Entrada
Uma cadeia de 12 caracteres, usando os símbolos descritos acima. Não nos importamos com as cores dos cartões, portanto eles não são fornecidos.
Exemplo:
K6K6JA3Q4389
Saída
O número de sequências distintas de Blackjack que podem ser encontradas na sequência de entrada.
Exemplo:
K6K6JA3Q4389
inclui duas sequências distintas de Blackjack:
JA
, com o Ás sendo contado como 11 pontos (10 + 11 = 21)A3Q43
, com o Ás sendo contado como 1 ponto (1 + 3 + 10 + 4 + 3 = 21)
Então a resposta seria 2
.
Regras
- Duas sequências de Blackjack são consideradas distintas se contiverem cartas diferentes ou as mesmas cartas em ordens diferentes. Se a mesma sequência exata aparecer em posições diferentes na lista de entrada, ela deverá ser contada apenas uma vez.
- As sequências de Blackjack podem se sobrepor.
- Cada tipo de cartão pode aparecer até 12 vezes na sequência. (Supomos que as cartas sejam escolhidas em pelo menos três baralhos diferentes.)
- Se nenhuma sequência de Blackjack puder ser encontrada na sequência de entrada, você deverá retornar
0
ou qualquer outro valor falso. - Isso é código-golfe, então a resposta mais curta em bytes vence. As brechas padrão são proibidas.
Casos de teste
As sequências são fornecidas para fins de informação, mas você só precisa gerar o número delas.
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
code-golf
subsequence
card-games
Arnauld
fonte
fonte
Respostas:
Geléia ,
3029 bytesExperimente Online! ou confira a suíte de testes
Quão?
Observe que, se sempre valorizamos um ás como 1 , as únicas somas válidas são 21 e 11 , sendo este último aceitável se um ás aparecer na sequência.
fonte
Python 2, 215 bytes
Comentários adicionados:
fonte
Python ,
134130 bytesExperimente online!
Quão?
Uma função sem nome, usando a sequência de comprimento 12 como
x
.x[i:j]
é uma fatia da cadeia de caracteres do i + 1 º ao j ésimo caractere.As fatias são tomadas de forma que todos nós sublistemos ao
i=0
passar de parai=11
comfor i in range(12)
, para cada um dos quais passamos dej=0
paraj=12
comfor j in range(13)
.(Nós apenas precisamos
j=i+1
e aumentamos, mas as fatiasj<=i
são apenas cadeias de caracteres vazias, para que possamos jogar fora de 4 bytesfor j in range(i+1,13)
)Estes são filtrados para aqueles com a soma correta ...
As somas válidas são 11 e 21 se houver um ás em uma fatia, ou apenas 21 se não.
'A'in x[i:j]
nos fornece essas informações e~(v)
executa-1-v
, as quais usamos para cortar[11,21]
- assim, se um ás está na sequência que obtemos[11,21][-2:]
e, se não, obtemos[11,21][-1:]
, resultando em[11,21]
e[21]
respectivamente.A soma em si precisa tratar
A
como 1, dígitos como os seus valores, eT
,J
,Q
e,K
como 10. Este mapeamento é conseguido através da primeira fundição de ordinais:" 2 3 4 5 6 7 8 9 T J Q K A"
(sem espaços) torna-se[50, 51, 52, 53, 54, 55, 56, 57, 84, 74, 81, 75, 65]
, subtrair 48 para obter[ 2, 3, 4, 5, 6, 7, 8, 9, 36, 26, 33, 27, 17]
, tomando omin
com 26 produções[ 2, 3, 4, 5, 6, 7, 8, 9, 26, 26, 26, 26, 17]
, e mod (%
) dezesseis são[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1]
, conforme exigido pela somasum(...)
,.Os resultados filtrados são colocados em um conjunto com
{...}
, portanto, apenas os resultados exclusivos permanecem e o comprimentolen(...)
é a contagemfonte
05AB1E ,
393837 bytesExperimente online!
Explicação
fonte
JavaScript (ES6), 123 bytes
fonte
0
paraAAAAAAAAAAAA
ao invés de1
. (A
pode ser simultaneamente 1 e 11)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 bytesAntiga tentativa aos 128:
fonte
s.search`A`>-1
poderia ser~s.search`A`
-2
, e1&-2 == 0
t
como0
na.slice(0,-1)
chamada (salva 2B)?t
é uma variável global e seria redefinida por causa da chamada paraf(s.slice(0,-1))
. Mas eu encontrei uma maneira de contornars.search`A`>-1
:-)JavaScript (ES6), 112 bytes
Essa lógica de código é bastante semelhante à usada nas respostas JS existentes da ETHproductions e Neil . Mas está usando uma matriz básica para acompanhar as sequências de Blackjack encontradas, em vez de a
Set
.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
05AB1E ,
40 39 38 3736 bytes-4 Agradecimentos a Emigna
Experimente online!
Precisamos fazer o decremento -> substring -> incremento para que os cartões de face sejam representados por um número de um dígito.
fonte
S
,Ç
transforma a sequência em uma lista de códigos de caracteres."SIPJ"
poderia ser„èµJu
„
na documentação.Ç<çJŒÙ'@0:)vy„èµJuS9:S>D1å2‚T*>sOå}O
então você é 1 byte mais curto do que a minha resposta :)Utilitários Bash + Unix,
145142141 bytesExperimente online!
Execuções de teste:
fonte
PHP, 240 bytes
Ungolfed:
Experimente aqui!
fonte
$i
não ter sido declarado. Adicionado 4 bytes e funciona perfeitamente.