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 .
0
les premiers,0
n’est s?locate
programme utilise ce type d’encodage sur les noms de chemin.Réponses:
Vim, 57 octets
Essayez-le en ligne!
la source
<H<G
-ce que la dernière substitution fonctionnerait?<
solution ne mente pas suffisamment de temps.:%s/ *
au lieu de la dernière substitution pour économiser deux octets.JavaScript (ES6),
66 6261 octetsEssayez-le en ligne!
Commenté
la source
Perl 6 ,
5048 octets-2 octets grâce à nwellnhof
Essayez-le en ligne!
Un port de la solution d' Arnauld . Mec, ce
R||
tour était une montagne russe de "je pense que cela pourrait être possible", de "non, c'est impossible", de "peut-être possible" et enfin "aha!"Explication:
La
$l [R||]=~$/
partie se traduit approximativement par$l= ~$/||+$l
mais ... elle a la même quantité d'octets:(
. A l'origine, il sauvegardait des octets en utilisant une variable anonyme, de sorte que celamy$l
avait disparu, mais cela ne fonctionnait pas, car la portée correspond maintenant à la substitution, pas aumap
codeblock. Tant pis. Quoi qu'il en soit,R
c'est le méta-opérateur inverse, de sorte qu'il inverse les arguments de||
, de sorte que la$l
variable finit par se voir attribuer le nouveau numéro (~$/
) si elle existe, sinon elle-même.Cela pourrait être 47 octets si Perl 6 ne lançait pas une erreur de compilation un peu redondante pour
=~
.la source
Ruby ,
494543 octetsEssayez-le en ligne!
Explication
la source
C,
6557 octetsEssayez-le en ligne!
Explication:
la source
brainfuck , 201 octets
Essayez-le en ligne!
Nécessite une fin de ligne à la fin de l’entrée. Une version sans cette exigence est plus longue de 6 octets:
brainfuck , 207 octets
Essayez-le en ligne!
Les deux versions supposent que tous les nombres sont strictement inférieurs à 255.
Explication
La bande est disposée comme suit:
La cellule "numéro" est égale à 0 si aucun chiffre n'est entré et à n + 1 si le nombre n est entré. L'entrée est prise à la cellule marquée "85".
la source
Python 3.6+,
172195156123122121104 octetsEssayez-le en ligne!
Explication
J'ai cédé et j'ai utilisé des expressions régulières. Cela a sauvé au moins 17 octets. :
Lorsque la chaîne ne commence pas par un chiffre, la longueur de cette chaîne sera
0
. Cela signifie que:sera
n
sit
est vide, etint(t)
sinon.supprime le nombre que l'expression régulière a trouvé
s
(s'il n'y en a pas, les0
caractères seront supprimés , sans êtres
tronqués) et remplacera tous lesn
caractères sauf les premiers du mot précédent par le fragment de mot actuel; et:affiche le mot actuel.
la source
Haskell,
8281 octetsPrend et retourne une liste de chaînes.
Essayez-le en ligne!
Edit: -1 octet grâce à @Nitrodon.
la source
Japt,
191817 octetsInitialement inspiré par la solution JS d' Arnauld .
L'essayer
la source
Gelée , 16 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 2 , 118 octets
Essayez-le en ligne!
la source
Retina 0.8.2 , 69 octets
Essayez-le en ligne! Le lien inclut les cas de test plus difficiles. Explication:
Pour toutes les lignes commençant par des lettres, copiez le numéro de la ligne précédente, en boucle jusqu'à ce que toutes les lignes commencent par un nombre.
Convertissez le nombre en unaire.
Utilisez des groupes d'équilibrage pour remplacer tous les
1
s par la lettre correspondante de la ligne précédente. (Cela se révèle être légèrement plus golfique que de remplacer toutes les exécutions de1
s.)la source
Rouge , 143 octets
Essayez-le en ligne!
la source
Java (JDK) , 150 octets
Essayez-le en ligne!
la source
Groovy , 74 octets
Essayez-le en ligne!
Explication:
la source
Gelée , 27 octets
Essayez-le en ligne!
la source
Perl 5
-p
,4541 octetsEssayez-le en ligne!
Explication:
la source
Groovy ,
103 à99 octetsEssayez-le en ligne!
la source
05AB1E ,
201917 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Common Lisp, 181 octets
Essayez-le en ligne!
Ungolfed:
Comme d'habitude, les identifiants longs de Common Lisp le rendent particulièrement adapté au PPCG.
la source
Python 2 ,
10110099 octetsEssayez-le en ligne!
la source
C # (compilateur interactif Visual C #) , 134 octets
Essayez-le en ligne!
-9 octets grâce à @ASCIIOnly!
Moins joué au golf ...
la source
l=n>0?n:l
pourl=m>0?n:l
parce qu'il ne reprenait pas le cas lorsqu'une ligne commençait par zéro (0jkl
). Merci pour le conseil!Scala ,
226129102 octetsMerci @ ASCII-only pour leur travail ici (et pour la réponse Groovy).
Essayez-le en ligne!
la source