Je me suis récemment laissé aller à une certaine nostalgie sous la forme de Bookworm Deluxe:
Au cas où vous ne l'auriez pas vue auparavant, c'est un jeu de mots où l'objectif est de relier des tuiles adjacentes pour former des mots. Afin de déterminer si une chaîne est un mot valide, il la compare à son dictionnaire interne, qui est stocké dans un format compressé ressemblant à ceci:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Les règles pour décompresser le dictionnaire sont simples:
Lisez le numéro au début de la ligne et copiez ce nombre de caractères à partir du début du mot précédent. (S'il n'y a pas de numéro, copiez autant de caractères que la dernière fois.)
Ajoutez les lettres suivantes au mot.
Ainsi, notre premier mot est aa
, suivi de 2h
, ce qui signifie "copie les deux premières lettres de aa
et ajoute h
," formant aah
. Puis 3ed
devient aahed
, et depuis la ligne suivante ne porte pas de numéro, nous copier à nouveau 3 caractères à la forme aahing
. Ce processus se poursuit dans le reste du dictionnaire. Les mots résultants du petit échantillon entré sont:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Votre défi consiste à effectuer cette décompression dans le moins d'octets possible.
Chaque ligne d’entrée contiendra zéro ou plusieurs chiffres 0-9
suivis d’une ou plusieurs lettres minuscules a-z
. Vous pouvez prendre en entrée et donner en sortie soit une liste de chaînes, soit une chaîne unique avec des mots séparés par un caractère autre que 0-9
/ a-z
.
Voici un autre petit cas de test avec quelques cas marginaux non traités dans l'exemple:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
Vous pouvez également tester votre code sur le dictionnaire complet: entrée , sortie .
locate
programme utilise ce type d’encodage sur les noms de chemin.
0
les premiers,0
n’est s?