Su tarea: escribir un programa / función que cuando se le da una cadena que contiene solo caracteres ASCII, genera / devuelve la cadena en reversa.
Ejemplo:
1) entrada
Hello, World!
2) Número de caracteres únicos en la entrada. (Cadena de entrada separada por tuberías ( |
) para facilitar la lectura)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Para los caracteres duplicados, encuentre la primera aparición de ese carácter y numere el carácter duplicado con el mismo número que el primero.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Invierta la cadena, pero no los números.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Eliminar los caracteres arriba de los números repetidos. (Caracteres eliminados representados con un asterisco).
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Reemplace los caracteres eliminados con el carácter que aparece sobre la primera vez que aparece el número eliminado.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) salida
!dlloW ,olleH
Casos de prueba:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Respuestas:
Pyth , 1 byte
Verifique todos los casos de prueba.
Pyth tiene maravillosas funciones integradas :-)
Pyth ,
87 bytesVerifique todos los casos de prueba.
Cómo funciona
Este es el enfoque no integrado más interesante.
fuente
Python 2 ,
4641 bytes-5 bytes gracias a Artyer
Pruébalo en línea!
fuente
lambda x:''.join(x[~x.find(n)]for n in x)
lugar de invertir y luego indexarJalea , 5 bytes
Pruébalo en línea!
fuente
CJam , 7 bytes
Pruébalo en línea!
Explicación
fuente
y
trabajado así.y
trabajado así. : PMATL , 6 bytes
Pruébalo en línea!
fuente
05AB1E , 2 bytes
Pruébalo en línea!
Explicación:
fuente
Alice , 17 bytes
Pruébalo en línea!
Explicación
Esta es solo la plantilla habitual para el código lineal en modo ordinal. Si desarrollamos esto, el programa real simplemente se convierte en:
La idea aquí es similar a la de mi respuesta de CJam . Dado que Alice no tiene una forma fácil de indexar en cadenas con enteros, es más fácil replicar este comportamiento con transliteración (
y
en Alice). Sin embargo, la semántica de transliteración de Alice es mucho más general que la de CJam, lo que significa que Alice no solo ignora las asignaciones repetidas. Por ejemplo, si solo quisiéramos transcribirMmm, marshmallows
a su reverso, esto representaría la siguiente lista de asignaciones:Tenga en cuenta que lo que tenemos, por ejemplo,
m -> w
,m -> o
,m -> a
ym -> a
. CJam simplemente descartaría todo excepto el primer mapeo, pero Alice en cambio pasaría por estos. Entonces, el primerom
se asignaría aw
, el segundo ao
, el quinto nuevamente aw
y así sucesivamente. En este caso, eso no es útil, porque en general si actuamosy
enAAB
(para algunas cadenasA
yB
) como lo hicimos en CJam, siempre llegaremos aB
Alice.Entonces, ¿cómo calculamos una asignación que funciona
y
(es decir, cómo descartamos las asignaciones repetidas manualmente)? Por supuesto, al usar otra transliteración. :)La fuente de la asignación que queremos tiene que ser el meollo de la entrada (es decir, la entrada deduplicada). Si aplicamos la asignación anterior a la protuberancia, entonces cada carácter solo aparece una vez, por lo que solo estamos haciendo uso de la primera de cada una de las asignaciones repetidas. Entonces, al transliterar la protuberancia con la entrada y su reversa, simplemente descartamos las asignaciones duplicadas. Entonces podemos usar la protuberancia y este nuevo resultado como un mapeo para la entrada original. Estoy seguro de que tiene sentido para alguien ...
Entonces el código:
fuente
Pyke , 7 bytes
Pruébalo aquí!
fuente
Perl 5 , 23 + 1 (
-p
) = 24 bytesPruébalo en línea!
Gracias a la entrada de Alice de @ MartinEnder por la idea de transliteración
fuente
JavaScript ES6 50 bytes
3 bytes guardados gracias a Justin Mariner
Pruébalo:
fuente
R ,
6865 bytes¡Verifique los casos de prueba!
Puertos 05AB1E de Erik método en los 3 bytes menos. No fue el primero, pero fue el primero que vi.
versión antigua:
Verifique todos los casos de prueba : imprime el vector con la entrada como nombres y la salida entre comillas a continuación.
Una implementación bastante ingenua, pero no creo que esto se acorte en R (y espero equivocarme al respecto). Es esencialmente un puerto R de la respuesta python de Rod, pero se desarrolló de forma independiente.
Explicación sin golf:
fuente
C (gcc) , 98 bytes
Pruébalo en línea!
El argumento debe ser una cadena modificable; la cadena se modifica en el lugar.
fuente
Röda , 27 bytes
Pruébalo en línea!
Esto toma una lista de caracteres como entrada y devuelve una secuencia de caracteres.
Usando el tipo de datos de cadena (40 bytes):
Pruébalo en línea!
fuente
Python ,
191128 bytesPruébalo en línea
fuente
Java 10,
1009997 bytesPuerto de la respuesta C de @ LeakyNun . Dudo que se pueda hacer más corto sin hacer algo similar en Java.
-1 byte gracias a @ceilingcat .
Ingrese como
char[]
(matriz de caracteres), y modifica esta entrada en lugar de devolver una nueva para guardar bytes.Pruébalo aquí.
fuente