En este desafío, su tarea es descifrar una cadena. Afortunadamente, el algoritmo es bastante simple: leyendo de izquierda a derecha, cada dígito encontrado N (0 a 9) debe ser reemplazado por el carácter que es N + 1 posiciones antes.
Ejemplo
La cadena de entrada "Prog2am0in6"
se decodificaría de esta manera:
Por lo tanto, la salida esperada es "Programming"
.
Aclaraciones y reglas.
- La cadena de entrada contendrá caracteres ASCII en el rango 32 - 126 exclusivamente. Puede suponer que nunca estará vacío.
- Se garantiza que la cadena descifrada original no contendrá ningún dígito.
- Una vez que un personaje ha sido decodificado, a su vez puede ser referenciado por un dígito posterior. Por ejemplo,
"alp2c1"
debe decodificarse como"alpaca"
. - Las referencias nunca se ajustarán a la cadena: solo se puede hacer referencia a los caracteres anteriores.
- Puede escribir un programa completo o una función, que imprime o genera el resultado.
- Este es el código de golf, por lo que gana la respuesta más corta en bytes.
- Las lagunas estándar están prohibidas.
Casos de prueba
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
Sería una entrada válida (con salida esperada deabbab
)? En otras palabras, ¿pueden las referencias envolver la cadena?1bbab
no es valido. He agregado una aclaración sobre eso.Respuestas:
Jalea ,
97 bytesPruébalo en línea!
Cómo funciona
fuente
Java 7,
8180 bytesPruébalo en línea!
Guardado 1 byte gracias a Anders Tornblad . El primer carácter no puede ser un dígito, por lo que no es necesario verificarlo, lo que significa que podemos preincrementar antes de verificar nuestra condición de terminación.
fuente
for(int i=0;++i<a.length;){
en su lugar, ahorrando un carácter.Haskell, 55 bytes
Ejemplo de uso:
reverse.foldl(#)[] $ "Prog2am0in6 Puz0les7&1Cod74G4lf"
->"Programming Puzzles & Code Golf"
. Pruébalo en línea!Reduzca la cadena a una copia inversa de sí misma con los números reemplazados por los caracteres correspondientes. "revertir", porque de esta manera tenemos fácil acceso a la cadena hasta el momento al indexar los números. Invierta de nuevo.
fuente
C, 46 bytes
Pruébalo en línea!
C,
524948 bytes¡Gracias a @ l4m2 por guardar un byte!
Edita la cadena de entrada directamente.
Pruébalo en línea!
Versión alternativa de 50 bytes:
Versión recursiva, 48 bytes:
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6),
5953 bytesGuardado 7 bytes gracias a fəˈnɛtɪk.
fuente
o-m-1
puede ser reemplazado cono+~m
.f=
parte, por lo que son 54 bytes, no 52.Retina , 37 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Explicación
Reemplace cada dígito d con d
«
s, seguido de uno»
. Necesitamos el último a) para poder reconocer posiciones donde d = 0 yb) como separador entre dígitos adyacentes.Repetidamente (
+
) coincida con la expresión regular en la primera línea de derecha a izquierda (r
) y luego reemplace la coincidencia más a la izquierda (1
) con la sustitución en la segunda línea.La expresión regular en sí coincide con uno de nuestros dígitos ahora unarios y cuenta el número de
«
s en el grupo 2. Luego, la mirada atrás coincide con los caracteres d(?<-2>.)*
antes de capturar el carácter mencionado en el grupo 1. La cadena de«
sy»
luego se reemplaza con el carácter capturado. .fuente
MATL ,
21191716 bytes¡Pruébalo en MATL Online!
Explicación
fuente
$y
en la nueva versión!U
solo funcionara por dígitos. Por desgracia,'e'U
los rendimientos deexp(1)
lo contrario podría haber librado de la4Y2
materiaJavaScript (ES6), 51 bytes
a
se utiliza para almacenar los dígitos reemplazados para tratar con dígitos que se refieren a otros dígitos.fuente
Perl 5 , 34 bytes
33 bytes de código +
-p
bandera.Pruébalo en línea!
s/\d/.../e
reemplace el primer dígito por...
evaluado como código Perl. (al...
estarsubstr$_,-$&-1+pos,1
en ese caso.substr$_,-$&-1+pos,1
devuelve la subcadena de$_
longitud1
en el índice-$&-1+pos
, donde$&
está el número que coincide ypos
es el índice del inicio de la coincidencia. Solo necesitamosredo
si el reemplazo fue exitoso para reemplazar cada dígito. (y el resultado se imprime implícitamente gracias a-p
flag).Enfoque anterior, 47 bytes:
44 bytes de código +
-F
bandera.Pruébalo en línea!
Muy sencillo en realidad.
-F
La bandera divide las entradas en cada carácter@F
.map{...}@F
itera a través@F
(es decir, cada carácter de la entrada). Si el carácter es un dígito (/\d/
), lo reemplazamos por el carácter en el índice$i-$_-1
. El$i
es la variable de índice actual (que mantenemos al incrementar en cada carácter visto).fuente
JavaScript ES6,
6159 bytesGracias @Luke por jugar 8 bytes
Pruébalo en línea!
fuente
x.split``
también podría ser[...x]
,[0-9]
podría ser\d
, juntos ahorrando 6Bx=>[...x].map((p,i,a)=>+p+1?a[i-1-p]:p).join``
por 46 bytesx=>[...x].map((p,i,a)=>a[i]=1+p>9?a[i-1-p]:p).join``
05AB1E ,
2717 bytesPruébalo en línea!
fuente
CJam, 13 bytes
Demo en línea.
Esta solución utiliza la "copia de Cjam incorporada n -ésimo en la pila" operador
$
para implementar la decodificación. Comienza leyendo la entrada (conq
) y luego recorriendo los caracteres de la cadena de entrada y volcándolos en la pila (con{}/
). Sin embargo, dentro del cuerpo del bucle también duplica cada carácter después de que se ha colocado en la pila (con_
) y comprueba si es un dígito buscando su posición#
en la cadena"0123456789"
, convenientemente representada comoA,s
.El resultado de esta búsqueda es el valor numérico del dígito o, si el carácter no es un dígito, -1. El
)
operario incrementos de valor que por uno, y$
lo reemplaza con la corriente carácter a que muchos puestos por debajo de la parte superior de la pila. Finalmente,\;
solo elimina la copia del carácter de entrada actual que hicimos_
de la pila, ya que ya no es necesario.fuente
Befunge-98 ,
4543 bytesPruébalo en línea!
La idea:
No pude acortar esta versión, pero esta tiene 44 bytes:
Pensé que lo compartiría por el buen truco con
s
, pero almacenar el contador en la pila conduce a esa mejora de 1 personaje.fuente
Python 2 , 59 bytes
Pruébalo en línea!
fuente
Python 2,
7571 bytesPruébalo en línea!
Editar: arreglado para valores ascii entre 32-47 ; Se corrigió la doble decodificación (por ejemplo, "alp2c1" a "alpaca")
fuente
'Prog2am0in6 Puz0les7&1Cod74G4lf'
su programa imprimeProgramming Puzzles &7Code1Golf
! ¡Lo intenté con ambos enlaces TIO compartidos!PHP 7.1
6759 bytesToma entrada de STDIN; ejecutar como tubería
-nR
o probarlo en línea ._&$c=$s[$i++]
recorrer la cadena (_&$c
dará como resultado algo que no es"0"
; por lo tanto, el único carácter que puede romper el ciclo es la cadena vacía = final de la entrada)$c^"0"
alternar los bits 5 y 6 en el código ASCII<"\n"
compruebe si el resultado es <chr (10)Gracias @Christoph por ahorrar 12%
fuente
$s=$argn
...?)for(;_&$c=$argn[$i++];)$t.=($c^"0")<"\n"?$t[~+$c]:$c;echo$t;
Vim macro / pulsaciones de teclas, 49 bytes
^M
representa el carácter de retorno (0x0A, 1 byte).Explicación
fuente
APL (Dyalog Classic) ,
2523 bytes-2 bytes gracias a @FrownyFrog
Pruébalo en línea!
usos
⎕io←1
(a
⍵
continuación representa un valor intermedio en la evaluación)⎕d
es la cuerda'0123456789'
⎕d⍳⍵
encuentra los índices (basados en 1 en este caso) de⍵
los caracteres de 's en⎕d
; para un no dígito el índice es 1111|⍵
es módulo: los 11 se convierten en 0≢⍵
es la longitud de⍵
⍳≢⍵
es1 2 ...
hasta≢⍵
entonces,
(⍳≢⍵)-11|⎕d⍳⍵
nos da un vector i de los índices donde deberíamos buscar para obtener los caracteres resultantes; sin embargo, algunos de esos índices pueden redirigir a otros índices (más pequeños). Para calcular el cierre transitivo (es decir, los índices efectivos), indexamos el vector en sí mismo (⊂⌷⊢
un tren equivalente(⊂i)⌷i
aoi[i]
) y lo repetimos hasta que se estabiliza (⍣≡
se conoce como el operador de punto fijo ).finalmente indexamos en la cadena original:
(...)⊃¨⊂
fuente
Python 2 ,
8380 bytesPruébalo en línea!
fuente
Japt , 24 bytes
Pruébalo en línea!
Explicación:
fuente
Ruby,
5646 bytesPruébalo en línea!
fuente
Python 2 , 58 bytes
Esto es esencialmente un puerto de mi respuesta Jelly, más la verificación de dígitos de la respuesta Python de @ xnor.
Pruébalo en línea!
fuente
Röda , 51 bytes
Pruébalo en línea!
fuente
JavaScript ES6, 54 bytes
fuente
f=
.> <> (Pez), 108 bytes (= cuadrícula 9 x 12)
Pruébalo aquí para ver a los peces nadando.
fuente
Código de máquina 8086, 35 bytes
fuente
ok, 39 bytes
Pruébalo en línea!
fuente
Japt v2.0a0, 16 bytes
Intentalo
Explicación
fuente
J , 20 bytes
Pruébalo en línea
Crédito a ngn por la inspiración.
22 bytes
Este es un puerto de la respuesta Jelly.
En ambas soluciones, la versión que utiliza TIO interpreta un solo
.
como el número 0, por lo que la última prueba falla. Las versiones anteriores (≤7) parecen funcionar correctamente.Pruébalo en línea!
fuente