Votre tâche consiste à trouver combien de séquences de Blackjack distinctes peuvent être trouvées dans une liste ordonnée de 12 cartes.
Une séquence de Blackjack est définie comme une séquence de cartes consécutives dont la somme des points est exactement 21. Les points sont comptés selon le tableau suivant:
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
Contribution
Une chaîne de 12 caractères, utilisant les symboles décrits ci-dessus. Nous ne nous soucions pas des couleurs des cartes, elles ne sont donc pas fournies.
Exemple:
K6K6JA3Q4389
Production
Le nombre de séquences de Blackjack distinctes qui peuvent être trouvées dans la chaîne d'entrée.
Exemple:
K6K6JA3Q4389
comprend deux séquences distinctes de Blackjack:
JA
, l'As étant compté comme 11 points (10 + 11 = 21)A3Q43
, l'As étant compté comme 1 point (1 + 3 + 10 + 4 + 3 = 21)
La réponse serait donc 2
.
Règles
- Deux séquences de Blackjack sont considérées comme distinctes si elles contiennent des cartes différentes ou les mêmes cartes dans des ordres différents. Si la même séquence exacte apparaît à différentes positions dans la liste de saisie, elle ne doit être comptée qu'une seule fois.
- Les séquences de Blackjack peuvent se chevaucher.
- Chaque type de carte peut apparaître jusqu'à 12 fois dans la séquence. (Nous supposons que les cartes sont choisies dans au moins 3 jeux différents.)
- Si aucune séquence de Blackjack ne peut être trouvée dans la chaîne d'entrée, vous devez renvoyer
0
ou toute autre valeur falsifiée. - Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte. Les failles standard sont interdites.
Cas de test
Les séquences sont fournies à titre informatif, mais vous ne devez en afficher que le nombre.
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
la source
Réponses:
Gelée ,
3029 octetsEssayez-le en ligne! ou consultez la suite de tests
Comment?
Notez que, si nous évaluons toujours un as comme 1, les seules sommes valides sont 21 et 11 , cette dernière étant acceptable si un as apparaît dans la séquence.
la source
Python 2, 215 octets
Commentaires ajoutés:
la source
Python ,
134130 octetsEssayez-le en ligne!
Comment?
Une fonction sans nom, prenant la chaîne de longueur 12 comme
x
.x[i:j]
est une tranche de la chaîne du i + 1 ème au j ème caractère.Les tranches sont prises de telle sorte que nous ayons toutes des sous-listes en traversant de
i=0
ài=11
avecfor i in range(12)
, pour chacune desquelles nous traversons dej=0
àj=12
avecfor j in range(13)
.(Nous n'avons besoin
j=i+1
que de plus, mais les tranches avec nej<=i
sont que des chaînes vides, nous pouvons donc jouer au golf à 4 octetsfor j in range(i+1,13)
)Ceux-ci sont filtrés pour ceux qui ont la bonne somme ...
Les sommes valides sont 11 et 21 s'il y a un as dans une tranche, ou juste 21 sinon.
'A'in x[i:j]
nous donne ces informations et~(v)
effectue-1-v
, que nous utilisons pour couper[11,21]
- donc si un as est dans la séquence que nous obtenons[11,21][-2:]
et sinon nous obtenons[11,21][-1:]
, résultant en[11,21]
et[21]
respectivement.La somme lui - même doit traiter
A
comme 1, des chiffres que leurs valeurs, etT
,J
,Q
etK
que 10. Cette cartographie est réalisée par coulée à la première ordinaux:" 2 3 4 5 6 7 8 9 T J Q K A"
(sans les espaces) devient[50, 51, 52, 53, 54, 55, 56, 57, 84, 74, 81, 75, 65]
, en soustrayant 48 pour obtenir[ 2, 3, 4, 5, 6, 7, 8, 9, 36, 26, 33, 27, 17]
, en prenant lamin
avec 26 rendements[ 2, 3, 4, 5, 6, 7, 8, 9, 26, 26, 26, 26, 17]
, et mod (%
) seize sont ceux[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1]
, au besoin pour la somme,sum(...)
.Les résultats filtrés sont placés dans un ensemble avec
{...}
, de sorte que seuls les résultats uniques restent et la longueur,len(...)
est le nombrela source
05AB1E ,
393837 octetsEssayez-le en ligne!
Explication
la source
JavaScript (ES6), 123 octets
la source
0
pourAAAAAAAAAAAA
plutôt que1
. (A
peut être simultanément 1 et 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")
pour 124 octetsJavaScript (ES6),
144138129128126124 octetsAncienne tentative à 128:
la source
s.search`A`>-1
pourrait être~s.search`A`
-2
, et1&-2 == 0
t
sur0
dans l'.slice(0,-1)
appel (enregistre 2B)?t
une variable globale et elle serait réinitialisée à cause de l'appel àf(s.slice(0,-1))
. Mais j'ai trouvé un moyen de contourners.search`A`>-1
:-)JavaScript (ES6), 112 octets
Cette logique de code est assez similaire à celle utilisée dans les réponses JS existantes d' ETHproductions et Neil . Mais il utilise un tableau de base pour garder une trace des séquences de Blackjack rencontrées plutôt qu'un
Set
.Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
05AB1E ,
40 39 38 3736 octets-4 Merci à Emigna
Essayez-le en ligne!
Nous devons faire la chose décrémentation -> sous-chaîne -> incrémentation afin que les cartes de visage soient représentées par un nombre à un seul chiffre.
la source
S
carÇ
transforme la chaîne en une liste de codes de caractères."SIPJ"
pourrait être„èµJu
„
dans la documentation.Ç<çJŒÙ'@0:)vy„èµJuS9:S>D1å2‚T*>sOå}O
alors vous êtes 1 octet de moins que ma réponse :)Utilitaires Bash + Unix,
145142141 141 octetsEssayez-le en ligne!
Essais:
la source
PHP, 240 octets
Non golfé:
Essayez-le ici!
la source
$i
n'a pas été déclaré. Ajout de 4 octets et cela fonctionne parfaitement.