C'est l'inverse de Faisons un peu "deciph4r4ng"
Dans ce défi, votre tâche consiste à chiffrer une chaîne. Heureusement, l'algorithme est assez simple: en lisant de gauche à droite, chaque caractère d'écriture typique (plage ASCII 32-126) doit être remplacé par un nombre N (0-9) pour indiquer qu'il est identique au caractère N + 1. positions devant elle. L'exception est lorsque le caractère n'apparaît pas dans les 10 positions précédentes de la chaîne d'origine. Dans ce cas, vous devez simplement réimprimer le personnage. En réalité, vous devriez pouvoir inverser l'opération par rapport au défi initial.
Exemple
La chaîne d'entrée "Programming"
serait encodée de cette façon:
Par conséquent, le résultat attendu est "Prog2am0in6"
.
Clarifications et règles
- La chaîne en entrée contiendra exclusivement des caractères ASCII compris entre 32 et 126. Vous pouvez supposer qu'il ne sera jamais vide.
- La chaîne d'origine est garantie de ne contenir aucun chiffre.
- Une fois qu'un caractère a été encodé, il peut être référencé par un chiffre ultérieur. Par exemple,
"alpaca"
devrait être codé comme"alp2c1"
. - Les références ne seront jamais entourées d'une chaîne: seuls les caractères précédents peuvent être référencés.
- Vous pouvez écrire un programme complet ou une fonction qui imprime ou produit le résultat.
- C'est le code de golf, donc la réponse la plus courte en octets gagne.
- Les échappatoires standard sont interdites.
Cas de test
Input : abcd
Output: abcd
Input : aaaa
Output: a000
Input : banana
Output: ban111
Input : Hello World!
Output: Hel0o W2r5d!
Input : this is a test
Output: this 222a19e52
Input : golfing is good for you
Output: golfin5 3s24o0d4f3r3y3u
Input : Programming Puzzles & Code Golf
Output: Prog2am0in6 Puz0les7&1Cod74G4lf
Input : Replicants are like any other machine. They're either a benefit or a hazard.
Output: Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Réponses:
05AB1E ,
20 1918 octets-2 Merci à Emigna
Essayez-le en ligne!
la source
)¹vDyåiDykëy}?y¸ìT£
marche aussi.õIvDyåiDykëy}?yìT£
pour 18 :)Retina ,
2423 octetsEssayez-le en ligne!
Une substitution de regex assez simple. Nous associons chaque caractère et essayons de trouver une copie de 0 à 9 caractères devant. Si nous le trouvons, nous remplaçons le caractère par le nombre de caractères que nous devions apparier pour obtenir la copie.
Les résultats ne correspondent pas tout à fait aux cas de test, car celui-ci utilise le plus grand chiffre possible au lieu du plus petit possible.
la source
JavaScript (ES6),
745754 octetsÉconomisé 3 octets grâce à ETHproductions avec le brillant
p=/./g
au lieu dep={}
(inspiré par Neil)Cas de test
Afficher l'extrait de code
la source
s
place dep
?find
version originale par- dessuslastIndexOf
, ce qui est un peu surprenant étant donné qu'il compte 11 lettres ....)s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-10?~i:c)
pour économiser 3 octets.Haskell ,
7266 octetsMerci à Laikoni pour avoir joué au golf 6 octets!
Essayez-le en ligne!
La fonction
%
conserve la chaîne partiellement traitée en sens inverse dans son deuxième argument afin de pouvoir rechercher dans les 10 premiers éléments de cette chaîne les occurrences du caractère examiné. La soumission consiste en la fonction non nommée(%"")
qui appelle la fonction précédente avec la chaîne vide comme second argument.la source
f(a:s)=f s++(last$[a]:[show n|(n,b)<-zip[0..9]s,b==a])
enregistre deux octets.f(a:s)=f s++[last$a:[n|(n,b)<-zip['0'..'9']s,b==a]]
économise encore plus.reverse
enregistre un octet supplémentaire: essayez-le en ligne!Python 2 , 64 octets
Essayez-le en ligne!
la source
~10
vous ne pouvez pas utiliser-11
?Perl 5 , 36 octets
35 octets de code +
-p
drapeau.Essayez-le en ligne!
Quelques explications:
Le but est de remplacer un caractère non-numérique (
\D
mais il correspond à la référence arrière\1
dans mon regex) précédé de moins de 10 caractères (.{0,9}
) et du même caractère ((\D)
...\1
) par la longueur du.{0,9}
groupe (length$2
). Etredo
pendant que les personnages sont remplacés.la source
.*
n'est pas obligatoire, tout caractère valide dans la plage avant le chiffre remplacé est correct.Python 2,
8984 octetsEssayez-le en ligne!
Itère dans la chaîne en sens inverse et construit une nouvelle chaîne avec les bons numéros insérés.
la source
Japt , 18 octets
Essayez-le en ligne!
Explication
la source
JavaScript,
10080 octetsEssayez-le en ligne!
la source
05AB1E , 20 octets
Essayez-le en ligne!
Explication
la source
Python 3,
125118 octetsEssayez-le en ligne!
la source
C (tcc) , 113 octets
Étant donné que la fonction crée une copie d'une chaîne d'entrée, la taille maximale de l'entrée est de 98 caractères (plus que suffisant pour s'adapter à la plus longue entrée de test). Bien sûr, cela peut être changé pour n’importe quelle autre valeur.
Essayez-le en ligne!
modifier
-15 octets. Merci Johan du Toit .
la source
i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j,j=-1;}
Java 7,
102101 octetsEssayez-le en ligne!
-1 octet grâce à Kevin Cruijssen . J'apprécie toujours une excuse pour utiliser l'opérateur qui va à.
la source
--c>=0
? Vous pouvez le remplacer parc-->0
pour sauvegarder un octet.MATL,
31 à30 octetsEssayez-le sur MATL Online!
Explication
la source
this is a test
donnethis 222a1te52
au lieu dethis 222a19e52
. La secondet
n'est pas convertie en9
.PHP, 104 octets
solution avancée
Solutions inverses
Versions en ligne
PHP, 111 octets
PHP, 112 octets
Version en ligne
la source
REXX,
124125 octetsla source
s<9
remplacée pars<10
ous<=9
. L'entréethis is a test
donnethis 222a1te52
au lieu dethis 222a19e52
. La secondet
n'est pas convertie en9
. Essayez-le en ligneC (gcc) ,
117103 octetsEssayez-le en ligne!
103 octets sans importation string.h, fonctionne avec warning. Si c'est contre les règles, je le tire
Pretty Code:
Modifications:
la source
(i=strlen(s);s[--i];)
lieu de(i=strlen(s)-1;s[i];i--)