Dans Skyrim, le personnage du joueur peut utiliser de puissants cris magiques (Thu'ums) pour atteindre ses objectifs. Chaque cri se compose de trois mots, cependant, le joueur peut utiliser le premier ou les deux premiers mots pour obtenir le même effet avec moins de puissance mais avec un temps de recharge plus court.
Étant donné une phrase ASCII Thu'um en minuscule sans ponctuation ni espaces , renvoyez le nombre de mots de puissance qu'elle contient.
Exemple:
fusrodah -> 3
dur -> 1
kaandrem -> 2
odah -> 2
vengaarnos -> 3
L'entrée sera toujours une chaîne ASCII minuscule formée en prenant l'un des cris ci-dessous, en choisissant les 1, 2 ou 3 premiers mots de ce cri et en concaténant les mots dans l'ordre.
dur neh viir
faas ru maar
feim zii gron
fo krah diin
fus ro dah
gaan lah haas
gol hah dov
hun kaal zoor
iiz slen nus
joor zah frul
kaan drem ov
krii lun aus
laas yah nir
lok vah koor
mid vur shaan
mul qah diiv
od ah viing
raan mir tah
rii vaaz zol
strun bah qo
su grah dun
tiid klo ul
ven gaar nos
wuld nah kest
yol toor shul
zul mey gut
zun haal viik
Alors fus
, fusro
et fusrodah
sont toutes les entrées valides, mais fusroviir
ne sont pas , car il utilise des mots de cris mixtes, et rodah
est pas parce que ce n'est pas un préfixe d'un cri. Vous n'avez pas non plus à gérer l'entrée de chaîne vide.
Le code le plus court en octets gagne.
Réponses:
Rétine,
78421514 octetsEssayez-le en ligne
tiidkloul est le seul mot qui n'a pas la même quantité de séquences de voyelles que le nombre censé être imprimé. Par conséquent, nous devons faire correspondre le mot pour lui donner une séquence de voyelles supplémentaire.
ou
ne correspondra qu'à tiidkl ou l et nous pouvons alors remplacer ou par oxo qui crée la séquence supplémentaire.Mon approche initiale n'était pas aussi simple, mais consistait à supprimer toutes les consonnes, puis à supprimer quelques séquences de voyelles (
ai|ii|aa|...
) et enfin à compter le nombre de lettres. Mais merci à @Martin Büttner d' avoir pensé à la[aeiou]+
place.la source
Rétine , 313 octets
Essayez-le en ligne!
Sur la base de quelques observations simples:
Cela signifie que nous pouvons simplement compter le nombre de mots qui apparaissent dans la chaîne sans se chevaucher. C'est exactement ce que fait une expression régulière. J'ai essayé de compresser le regex un peu au-delà de la simple concaténation de tous les mots avec
|
(qui serait de 351 octets), mais je suis sûr que c'est loin d'être optimal. Pour commencer, je n'ai certainement pas exploité toutes les parties communes de manière optimale. Mais plus important encore, il est possible de compresser la chaîne encore plus en la faisant correspondre à plus de chaînes que de mots valides, tant que ceux-ci ne peuvent pas correspondre accidentellement à une partie d'un mot valide (car ils ne seront alors jamais mis en correspondance). Je suis quasiment sûr qu'il faudrait automatiser la compression pour vraiment être sûr qu'elle est optimale.la source
Perl 5, 28 octets
Le nombre d'octets comprend un pour
-p
.Volé directement à dev-null . (Merci, dev-null!)
la source