Existe un cifrado muy simple que reemplaza una letra con su posición en el alfabeto. Por ejemplo, abc
se convertiría 1 2 3
en este cifrado.
Este desafío es una versión alternativa de este cifrado.
El reto
Cree un programa que tome una entrada de caracteres ASCII y genere una cadena separada por espacios de:
enteros a
-26
través de26
cartas a
a
través dej
La salida debe venir a través de STDOUT o la alternativa más cercana a su idioma.
Especificaciones
Las letras mayúsculas deben ser negadas. Una capital,
D
por ejemplo, sería-4
, mientras que una minúsculad
sería4
.Los dígitos deben cambiarse a sus homólogos alfa.
1
sera
, y así sucesivamente. Cualquier ceros en la entrada seráj
.Todos los caracteres no alfanuméricos (excepto los espacios) deben ignorarse.
Los espacios son
0
.Los espacios adyacentes en la salida deben reducirse a un solo espacio.
Input: You + Me Correct Output: -25 15 21 0 -13 5 Incorrect Output: -25 15 21 0 0 0 -13 5
Se permite un solo espacio final o nueva línea.
Ejemplos
Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19
Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6
Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6
Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6
Input: abc_ABC
Output: 1 2 3 -1 -2 -3
Marcador
Para que su puntaje aparezca en el tablero, debe estar en este formato:
# Language, Bytes
Los tachados no deberían causar un problema.
fuente
Respuestas:
CJam,
585754515049 bytesJusto cuando escribí la explicación, noté que una de las versiones alternativas de 50 bytes se puede acortar por un byte ...
Pruébalo aquí.
Soluciones de 50 bytes:
Explicación
Esta debe ser la primera vez que el comportamiento del módulo de CJam para valores negativos fue útil para mí.
fuente
JavaScript (ES6),
110107133120 bytes¡Toma eso, viejo yo!
Potencialmente, hay mucho más espacio para jugar al golf,
especialmente en las expresiones regulares, porque eso lo consiguió bastante bien. Versión sin golf:Sugerencias bienvenidas!
fuente
All non-alphanumeric characters should be ignored.
. Prueba: 'A $ b' debería ser-1 2
Pyth,
5049 bytesPruébalo aquí .
Editar: reestructurado sanitización de cadenas para garantizar que los guiones bajos se manejen correctamente. Incluso salvó un byte también, ¡yay!
Este programa crea una cadena de búsqueda, que se utiliza para desinfectar la entrada. Esto se asigna al índice correspondiente en esa cadena. Finalmente, cualquier índice mayor que 26 se convierte al carácter ASCII correcto.
Versión anterior, que utilizaba
\W
expresiones regulares, a 50 bytes:fuente
Julia,
145136 bytesSin golf:
Para obtener los dígitos como letras, sumamos 58 al valor ASCII y restamos 10 si el carácter actual no es 0. Eso asegura que 0 se asigne a
j
y los otros dígitos se asignen aa
-i
.Negar letras mayúsculas se hace usando
cmp
. Esto devolverá -1 para letras mayúsculas y 1 para minúsculas.Pruébalo en línea
fuente
Perl 5,
120116113105 BytesPrimero limpia los caracteres no deseados y los espacios adicionales.
Luego baja por la tabla ascii para cada personaje.
Prueba
fuente
s/ +/ /g
, la primera expresión regular es incorrecta porque \ w coincide con el carácter de subrayados/[^\w ]|_//g
C,
142138135Ungolfed un poco:
Pasa las pruebas dadas en GCC 4.9.3 y Clang 3.5.2.
fuente
> <> (pez),
219209 bytesPruébalo aquí
Este es mi primer código de respuesta de golf! Finalmente pude usar el lenguaje que quería usar para un desafío de golf de código, y este parecía ser el perfecto dado que los caracteres se convierten automáticamente en decimales.
Esperaba que mi resultado fuera mucho más corto, pero aparentemente no. Sin embargo, no he jugado mucho al golf. Hay algunos lugares donde el código podría ser más limpio / tener más sentido, pero no guardará ningún byte ya que están en lugares donde se necesita espacio en blanco de todos modos. Puede haber una forma de guardar algunos bytes en el último bit en la segunda línea, haciendo que vaya en la dirección opuesta y combinando con el 00 que ya está allí, tendré que jugar con él más tarde
Básicamente, esto verifica si el carácter actual es un espacio, número, letra mayúscula o letra minúscula, verificando si está dentro del rango de los valores más altos / más bajos de ese grupo. Si no es ninguno de esos, se descarta. Si está en uno de esos, se convierte en un número si es una letra, y una letra si es un número (o más bien, un número del 97-106 que son los valores para las letras aj). Luego verifica si el valor superior es menor que 28, en cuyo caso es un número y genera un número; de lo contrario, es una letra y genera la letra que representa ese número, genera un espacio y luego realiza un bucle hasta que la pila esté vacía.
fuente
JavaScript (ES6),
108122124Editar usando la expresión regular del comentario de @ Max
Edit2 14 bytes guardados gracias ETHProductions
EcmaScript 6 solo para las funciones de flecha, por lo que debería funcionar en Firefox y la última versión de Chrome.
Prueba a ejecutar el fragmento a continuación
fuente
[R](/ +/g,' ')[R](/./g,
a[R](/ +|./g,
. (Perdón por mencionar una publicación antigua, por cierto)Pyth, 57 bytes
Demostración en vivo y casos de prueba.
fuente
CJam, 52 bytes
Pruébalo en línea
La parte clave con la solución es que usa el CJam
er
(transliteración). Como argumentos para el operador, necesita la lista de todos los caracteres y una lista de los valores correspondientes.Como paso previo al procesamiento en la entrada, elimina los caracteres que no forman parte de la tabla de traducción (caracteres especiales) y reduce los espacios repetidos a un solo espacio.
Explicación:
fuente
Python 2,
191179177173172168160 bytesPrueba
fuente
PHP, 116 bytes
toma entrada de STDIN; correr con
-nR
.Descompostura
Puede reemplazar el
@
con una tecla de retroceso para manejar espacios en la parte en minúsculas.Conjabcdefghi0
los dígitos, también puede usar:
.fuente
"#_|[^\w ]#"
lugar de"#[^\w ]|_#"
.Hassium , 1156 bytes
Respuesta muy larga
fuente
You + Me
produce la salida-25 15 21 0 0 -13 5
.Dec
columna.)Jelly , 32 bytes, desafío de fechas posteriores al idioma
Pruébalo en línea!
Explicación
Función auxiliar
1Ŀ
(traduce cada alfanumérico / espacio en la entrada en un número)Función auxiliar
2£
(devuelve la cadena constante“jabcdefghi”
)Programa principal
fuente
Retina,
7470 bytes (no competitiva)Observe el espacio inicial en la línea 3, el espacio final en la línea 6 y la segunda línea vacía.
Pruébalo en línea!
Aunque el lenguaje se creó antes del desafío, creo que algunas de las características del lenguaje que utilicé son posteriores al desafío, por lo que lo he marcado como no competitivo.
fuente
Java 7,
257254bytesPruébalo aquí.
Explicación:
Ejemplo de entrada y salida:
fuente