Dans ce défi, votre tâche consiste à déchiffrer une chaîne. Heureusement, l'algorithme est assez simple: en lisant de gauche à droite, chaque chiffre N rencontré (0 à 9) doit être remplacé par le caractère précédant de N + 1 positions.
Exemple
La chaîne d'entrée "Prog2am0in6"
serait décodée de cette façon:
Par conséquent, le résultat attendu est "Programming"
.
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échiffrée d'origine est garantie de ne contenir aucun chiffre.
- Une fois qu'un caractère a été décodé, il peut être référencé par un chiffre ultérieur. Par exemple,
"alp2c1"
devrait être décodé comme"alpaca"
. - 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 golf, donc la réponse la plus courte en octets est gagnante.
- Les échappatoires standard sont interdites.
Cas de test
Input : abcd
Output: abcd
Input : a000
Output: aaaa
Input : ban111
Output: banana
Input : Hel0o W2r5d!
Output: Hello World!
Input : this 222a19e52
Output: this is a test
Input : golfin5 3s24o0d4f3r3y3u
Output: golfing is good for you
Input : Prog2am0in6 Puz0les7&1Cod74G4lf
Output: Programming Puzzles & Code Golf
Input : Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Output: Replicants are like any other machine. They're either a benefit or a hazard.
1bbab
une entrée valide (avec la sortie attendue deabbab
)? En d'autres termes, les références peuvent-elles entourer la chaîne?1bbab
n'est pas valide. J'ai ajouté une clarification à ce sujet.Réponses:
Gelée ,
97 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Java 7,
81 à80 octetsEssayez-le en ligne!
Sauvé 1 octet grâce à Anders Tornblad . Le premier caractère ne peut pas être un chiffre, il n'a donc pas besoin d'être vérifié, ce qui signifie que nous pouvons effectuer une pré-incrémentation avant de vérifier notre condition de fin.
la source
for(int i=0;++i<a.length;){
au lieu de cela, en sauvant un caractère.Haskell, 55 octets
Exemple d'utilisation:
reverse.foldl(#)[] $ "Prog2am0in6 Puz0les7&1Cod74G4lf"
->"Programming Puzzles & Code Golf"
. Essayez-le en ligne!Réduisez la chaîne en une copie inversée d'elle-même avec les nombres remplacés par les caractères correspondants. "reverse", car de cette façon, nous avons un accès facile à la chaîne jusqu'à présent lors de l'indexation des nombres. Inverser à nouveau.
la source
C, 46 octets
Essayez-le en ligne!
C,
524948 octetsMerci à @ l4m2 d'avoir économisé un octet!
Édite directement la chaîne d'entrée.
Essayez-le en ligne!
Version alternative à 50 octets:
Version récursive, 48 octets:
la source
05AB1E , 11 octets
Essayez-le en ligne!
Explication
la source
JavaScript (ES6),
5953 octetsSauvegardé 7 octets grâce à fəˈnɛtɪk.
la source
o-m-1
peut être remplacé paro+~m
.f=
partie. Il s’agit donc de 54 octets et non de 52.Retina , 37 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Explication
Remplacez chaque chiffre d par d
«
s, suivi d'un»
. Nous avons besoin de ce dernier a) pour pouvoir reconnaître les positions où d = 0 et b) comme séparateur entre les chiffres adjacents.Répétez (
+
) associez l'expression régulière sur la première ligne de droite à gauche (r
), puis remplacez le match le plus à gauche (1
) par le remplacement de la deuxième ligne.La regex elle-même correspond à l'un de nos chiffres maintenant unaires et compte le nombre de
«
s dans le groupe 2. La recherche arrière associe ensuite d caractères à(?<-2>.)*
avant de capturer le caractère référencé dans le groupe 1. La chaîne de«
s et»
est ensuite remplacée par le caractère capturé .la source
MATL ,
21191716 octetsEssayez-le sur MATL Online!
Explication
la source
$y
dans la nouvelle version!U
ne travaillait que pour les chiffres. Malheureusement, les'e'U
rendementsexp(1)
ont été sinon, j'aurais pu me débarrasser de ces4Y2
trucsJavaScript (ES6), 51 octets
a
est utilisé pour stocker les chiffres remplacés pour traiter les chiffres faisant référence à d'autres chiffres.la source
Perl 5 , 34 octets
33 octets de code +
-p
drapeau.Essayez-le en ligne!
s/\d/.../e
remplace le premier chiffre par...
évalué en tant que code Perl. (avec...
êtresubstr$_,-$&-1+pos,1
dans ce cas.substr$_,-$&-1+pos,1
renvoie la sous-chaîne de$_
longueur1
à index-$&-1+pos
, où$&
est le nombre qui vient de correspondre, et quipos
est l'index du début de la correspondance. Nous devons justeredo
si le remplacement a réussi pour remplacer chaque chiffre. (et le résultat est implicitement imprimé grâce à-p
flag).Ancienne approche, 47 octets:
44 octets de code +
-F
drapeau.Essayez-le en ligne!
Assez simple en fait.
-F
flag divise les entrées de chaque caractère en@F
.map{...}@F
itère à travers@F
(c'est-à-dire chaque caractère de l'entrée). Si le caractère est un chiffre (/\d/
), nous le remplaçons par le caractère à l'index$i-$_-1
. Le$i
est la variable d'index actuelle (que nous maintenons en incrémentant à chaque caractère vu).la source
JavaScript ES6,
6159 octetsMerci @ Luke pour le golf de 8 octets
Essayez-le en ligne!
la source
x.split``
pourrait aussi être[...x]
,[0-9]
pourrait être\d
, ensemble sauver 6Bx=>[...x].map((p,i,a)=>+p+1?a[i-1-p]:p).join``
pour 46 octetsx=>[...x].map((p,i,a)=>a[i]=1+p>9?a[i-1-p]:p).join``
05AB1E ,
2717 octetsEssayez-le en ligne!
la source
CJam, 13 octets
Démo en ligne.
Cette solution utilise l'opérateur "copier le n- ième élément de la pile" intégré de CJam
$
pour mettre en œuvre le décodage. Il commence par lire l'entrée (avecq
), puis passe en boucle sur les caractères de la chaîne d'entrée et les dépose sur la pile (avec{}/
). Toutefois, à l'intérieur du corps de la boucle, il duplique également chaque caractère après l'avoir placé dans la pile (avec_
) et vérifie s'il s'agit d'un chiffre en recherchant sa position#
dans la chaîne"0123456789"
, représentée de manière pratique parA,s
.Le résultat de cette recherche est soit la valeur numérique du chiffre, soit -1 si le caractère n'est pas un chiffre. L'
)
opérateur incrémente ensuite cette valeur de un et le$
remplace par le caractère en cours à autant de positions situées sous le sommet de la pile. Enfin,\;
supprime simplement la copie du caractère de saisie actuel que nous avons créé avec_
la pile, car elle n’est plus nécessaire.la source
Befunge-98 ,
4543 octetsEssayez-le en ligne!
L'idée:
Je n'ai pas pu obtenir cette version plus courte, mais celle-ci est de 44 octets:
Je pensais que je le partagerais à cause de l'astuce avec
s
- mais le stockage du compteur sur la pile conduit à cette amélioration d'un caractèrela source
Python 2 , 59 octets
Essayez-le en ligne!
la source
Python 2,
7571 octetsEssayez-le en ligne!
Edit: Correction pour les valeurs ASCII comprises entre 32 et 47 ; Correction pour le double décodage (par exemple "alp2c1" à "alpaca")
la source
'Prog2am0in6 Puz0les7&1Cod74G4lf'
vos impressions de programmeProgramming Puzzles &7Code1Golf
! J'ai essayé avec les deux liens TIO partagés!PHP 7.1
6759 octetsPrend la contribution de STDIN; courir comme pipe
-nR
ou essayer en ligne ._&$c=$s[$i++]
boucle par chaîne (_&$c
il en résultera quelque chose d'autre"0"
; ainsi, le seul caractère capable de rompre la boucle est la chaîne vide = fin de l'entrée)$c^"0"
bascule les bits 5 et 6 dans le code ascii<"\n"
vérifier si le résultat est <chr (10)Merci @Christoph d'avoir économisé 12%
la source
$s=$argn
...?)for(;_&$c=$argn[$i++];)$t.=($c^"0")<"\n"?$t[~+$c]:$c;echo$t;
Macro / touches Vim, 49 octets
^M
représente le caractère de retour (0x0A, 1 octet).Explication
la source
APL (Dyalog Classic) ,
2523 octets-2 octets grâce à @FrownyFrog
Essayez-le en ligne!
les usages
⎕io←1
(
⍵
ci - dessous représente une valeur intermédiaire dans l'évaluation)⎕d
est la ficelle'0123456789'
⎕d⍳⍵
trouve les indices de⍵
caractères de (dans ce cas-ci) dans⎕d
; pour un non-chiffre l'index est 1111|⍵
is modulo - les 11 deviennent des 0≢⍵
est la longueur de⍵
⍳≢⍵
est1 2 ...
jusqu'à≢⍵
alors,
(⍳≢⍵)-11|⎕d⍳⍵
nous donne un vecteur i des indices où nous devrions chercher à obtenir les caractères résultants; Cependant, certains de ces indices peuvent être redirigés vers d’autres index encore (plus petits). Pour calculer la fermeture transitive (c'est-à-dire les indices effectifs), nous indexons le vecteur en lui-même (⊂⌷⊢
un train équivalent à(⊂i)⌷i
oui[i]
) et nous le répétons jusqu'à ce qu'il se stabilise (⍣≡
est connu sous le nom d' opérateur de point fixe ).enfin nous indexons dans la chaîne d'origine:
(...)⊃¨⊂
la source
Python 2 ,
8380 octetsEssayez-le en ligne!
la source
Japt , 24 octets
Essayez-le en ligne!
Explication:
la source
Ruby,
5646 octetsEssayez-le en ligne!
la source
Python 2 , 58 octets
Ceci est essentiellement un portage de ma réponse Jelly, plus le contrôle des chiffres de la réponse Python de @ xnor.
Essayez-le en ligne!
la source
Röda , 51 octets
Essayez-le en ligne!
la source
JavaScript ES6, 54 octets
la source
f=
.> <> (Poisson), 108 octets (= grille de 9 x 12)
Essayez-le ici pour voir le poisson nager dans les environs.
la source
8086 code machine, 35 octets
la source
OK, 39 octets
Essayez-le en ligne!
la source
Japt v2.0a0, 16 octets
L'essayer
Explication
la source
J , 20 octets
Essayez-le en ligne
Crédit à l'inspiration pour l'ign.
22 octets
Ceci est un port de la réponse de la gelée.
Dans les deux solutions, la version utilisée par TIO en interprète un
.
comme le nombre 0. Le dernier test échoue. Les versions plus anciennes (≤7) semblent fonctionner correctement.Essayez-le en ligne!
la source