Règles
Dans ce défi, je vais redéfinir un peu la définition de "guillemets".
Les guillemets (AKA quotes ) sont des caractères identiques utilisés par paires dans divers systèmes d'écriture pour déclencher la parole directe, une citation ou une phrase. La paire se compose d'un guillemet d'ouverture et d'un guillemet de fermeture, qui est le même caractère (sensible à la casse).
S'il y a des paires de devis qui se chevauchent,
- Si une paire en imbrique une autre, les deux paires sont toujours valides.
- Si une paire n'en imbrique pas une autre, la première paire de départ reste valide. L'autre n'est plus considéré comme une paire.
Lors du comptage des caractères entre guillemets (longueur d'une paire de guillemets),
- Les citations elles-mêmes ne comptent pas.
- La longueur de chaque paire est comptée indépendamment. Le chevauchement n'en affecte pas un autre.
Objectif
Votre objectif est d'imprimer la longueur totale de tous les devis valides. C'est le code golf, donc le code avec le moins d'octets gagne.
Exemples
Legend:
<foo>: Valid quotes
^ : Cannot be paired character
Input : ABCDDCBA
`A` (6): <BCDDCB>
`B` (4): <CDDC>
`C` (2): <DD>
`D` (0): <>
Output : 12
Input : ABCDABCD
`A` (3): <BCD>
`B` (0): ^ ^
`C` (0): ^ ^
`D` (0): ^ ^
Output : 3
Input : AABBBBAAAABA
`A` (0): <> <><> ^
`B` (0): <><> ^
Output : 0
Input : ABCDE
Output : 0
Input : Print the total length of all "quoted" characters
`r` (40): <int the total length of all "quoted" cha>
`n` (14): <t the total le>
`t` (15): < > <o> <h of all "quo>
` ` (7): ^ <total> <of> ^ ^
`h` (0): ^ ^ ^
`e` (8): < total l> ^ ^
`o` (0): ^ ^ ^
`a` (0): ^ ^ ^ ^
`l` (0): ^ ^ <>
`"` (0): ^ ^
`c` (0): ^ ^
Output : 84
Input : Peter Piper picked a peck of pickled peppers
`P` (5): <eter >
`e` (9): <t> ^ <d a p> <d p> ^
`r` (0): ^ ^
` ` (3): ^ ^ <a> <of> ^
`i` (5): <per p>
`p` (3): <er > ^ ^ ^ <>
`c` (8): <ked a pe> ^
`k` (7): ^ < of pic>
`d` (0): ^ ^
Output : 40
Input : https://www.youtube.com/watch?v=dQw4w9WgXcQ
`h` (27): <ttps://www.youtube.com/watc>
`t` (0): <> ^ ^
`/` (0): <> ^
`w` (14): <><.youtube.com/> <4>
`.` (7): <youtube>
`o` (0): ^ ^
`u` (1): <t>
`c` (0): ^ ^ ^
`Q` (8): <w4w9WgXc>
Output : 57
Réponses:
Gelée , 12 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 36 octets SBCS
Programme complet. Demande l'entrée de stdin.
Essayez-le en ligne!
t←⍬
mettre en place un accumulateurt
(pour t otal)⍞⊣
jetez cela en faveur de l'entrée de chaîne de stdin (symbole: citation dans la console){
…}⍣≡
Appliquer le lambda anonyme suivant jusqu'à ce qu'il soit stable (point fixe; précédent ≡ suivant)⊢⍵
sur l'argument...
⎕S'\2'
PCRE S Earch pour le suivant, le groupe 2 de retour pour chaque match:(.)
n'importe quel caractère (nous appellerons ce groupe 1)(.*?)
aussi peu de caractères que possible (nous appellerons ce groupe 2)\1
le caractère du groupe 1t,←
mettret
à jour en ajoutant cela àt
la valeur actuelle det⊣
jeter cela (la liste finale de non-correspondances) en faveur det
≢
compter le nombre de caractères dans cela source
Rubis , 49 octets
Solution récursive. Recherchez des groupes de devis, comptez leurs longueurs, puis recherchez récursivement les longueurs de sous-groupe et additionnez le tout.
Essayez-le en ligne!
la source
JavaScript (ES6), 64 octets
Essayez-le en ligne!
Commenté
la source
JavaScript (Node.js) ,
656462 octetsEssayez-le en ligne!
Approche originale (64 octets):
Essayez-le en ligne!
la source
Brain-Flak , 100 octets
Essayez-le en ligne!
Commenté
la source
Gelée , 17 octets
Essayez-le en ligne!
Un programme complet qui prend un seul argument, la chaîne d'entrée enveloppée dans une liste et retourne le nombre de guillemets sous forme d'entier.
la source