Desafío
Inspirado en este video
Como sabrán, un palíndromo es una palabra que se escribe igual hacia adelante que hacia atrás. La palabra "PULP" no es un palíndromo, pero cuando se traduce al Código Morse (sin el espacio entre las letras), "PULP" se convierte en ". - ...-.-...--." que es un palíndromo Su tarea es escribir un programa o función que tome una cadena y devuelva si esa palabra es un palíndromo en el Código Morse Internacional.
A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..
Reglas
Entrada
La entrada puede tomarse en cualquier formato razonable. La cadena de entrada contendrá solo letras en cualquier caso que prefiera. La cadena no contendrá espacios, números o signos de puntuación.
Salida
Su programa debería generar 1 de 2 resultados distintos constantes en función de si la entrada es un palíndromo, por ejemplo, Verdadero / Falso, 1/0, HOTDOG / NOTHOTDOG
Puntuación
Este es el código de golf, por lo que la respuesta más corta en bytes gana. Las lagunas estándar están prohibidas.
Casos de prueba
Entrada => Salida
"PULP" => True
"RESEARCHER" => True
"HOTDOGS" => True
"" => True
"A" => False
"RACECAR" => False
"PROGRAMMING"=> False
"PUZZLES" => False
fuente
Respuestas:
Jalea , 28 bytes
Pruébalo en línea!
Escribí esta respuesta mirando uno de estos (¡lee las filas de derecha a izquierda y obtienes mi cadena mágica!):
fuente
73,540,211,105,102,870,315,464,559,332nd
... ¡¿qué?! ¿Cómo encontraste ese número? Además, ¿cómo no lleva eso una eternidad correr?00ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Jelly tiene incorporados para convertir una permutación en tal número, y dicho número nuevamente en la permutación. Ver base de números factoriales en Wikipedia.00ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jalea ,
35 32 2725 bytes-2 gracias a Dennis (cambia la permutación para evitar
%32
)Toma entrada en mayúsculas; la salida es
1
para verdadero,0
para falso.Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
Solución anterior de 35 bytes (también toma entrada en mayúsculas) ...
fuente
Dyalog APL , 24 bytes
Pruébalo en línea!
dfns
nunca deja de sorprenderfuente
MBASIC , 325 bytes
Primer intento, antes de que las grandes armas lleguen aquí :-)
Salida
fuente
JavaScript (Node.js) , 111 bytes
Pruébalo en línea!
fuente
Perl 6 , 87 bytes
Pruébalo en línea!
Convierte la palabra en una serie de 1s y 0s y comprueba si es palindrómica.
Explicación:
fuente
Python 3 ,
172148104 bytesPrimer código de golf. Sea amable y ofrezca cualquier ayuda :)
Esto se basa en la respuesta de C #: /codegolf//a/175126/83877 . Tomé las mismas ideas y las apliqué a Python 3. Hice mi mejor esfuerzo para jugar golf con el código, pero estoy seguro de que hay mucho más que puedo hacer.
EDITAR 1: Gracias @Stephen y @Cowabunghole por ayudarme a eliminar algunos espacios en blanco y código innecesario.
EDIT 2: Gracias @JoKing por la sugerencia de hacerlo en binario. Este es un truco realmente bueno donde '-' y '.' Ni siquiera son necesarios. Esto condujo a una gran disminución de bytes.
Solución
Pruébalo en línea!
fuente
while i > 0:
awhile i>0:
para guardar 2 bytes. Además, podría estar equivocado, pero creo que puede eliminarlo por> 0
completo y simplemente usarlowhile i:
. En segundo lugar, la instrucción en el ciclo while puede ir en la misma línea que while, guardando la nueva línea y la sangría. Por último, este es un consejo terrible en todas partes, excepto cuando se juega golf de código, pero si usa Python 2 en lugar de Python 3, puede guardar 1 byte en/
lugar de//
para la división.~-i
lugar dei-1
. Este es el mismo número de bytes, pero puede omitir los paréntesis que ahorran 2 bytes.-
y.
. 105 bytesPyth,
3533 bytesEl código contiene caracteres no imprimibles, así que aquí hay un hexdump.
Pruébalo en línea. Banco de pruebas.
Explicación
Comenzando desde
."
el final del código genera el alfabeto Morse, con puntos como\x08
y guiones como\x07
, y separados por pestañas.c
divide la cadena por las pestañas.XzG
traduce (X
) la entrada (z
) del alfabeto (G
) a este "alfabeto Morse".s
suma (une) los símbolos Morse juntos. Para entradas vacías, devuelve 0, pero esto no es un problema._I
comprueba si el resultado no cambia (I
) cuando se invierte (_
). Para entradas vacías, verifica si 0 no cambia cuando se niega.fuente
Retina 0.8.2 , 87 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Todos los códigos Morse para las letras en este conjunto terminan con
.
.Todos los códigos Morse para las letras en este conjunto terminan con
-
.Reemplace cada letra con la letra cuyo código Morse es el prefijo de esa letra (aquí
E
yT
simplemente se eliminan mediante el no escapado_
, pero normalmente se convertirían en espacios). Por ejemplo,P
es el código MorseW
con un extra.
al final; agregamos lo.
anterior así que ahora todo lo que queda es decodificar elW
.Repita las etapas anteriores hasta que no queden letras.
Si el primer y el último carácter son iguales, elimínelos a ambos.
Repita para tantos caracteres que coincidan.
Si esto era un palíndromo, entonces queda como máximo un personaje.
fuente
Wolfram Language (Mathematica) , 107 bytes
Pruébalo en línea!
Similar a esta respuesta de Jelly: pensamos en el código Morse como binario, y escribimos una cadena
" ETIANMSURWDKGOHVF L PJBXCYZQ"
donde la posición de un personaje, en binario, nos da su código Morse. Pero con un 1 extra antepuesto porque queremos distinguirS = 000
yH = 0000
, por ejemplo. Luego,##2&@@@
simultáneamente, se deshace de este primer 1 y se aplana.fuente
05AB1E , 37 bytes
Pruébalo en línea!
Codifica el alfabeto en la base 3, convertido a la base 255:
Base 255:
Luego, básicamente, lo separo en los 0, construyo la cadena por posición y compruebo el palíndromo.
fuente
C # (.NET Core) , 191 bytes
Pruébalo en línea!
Parte de esta respuesta fue adaptada del código morse golf de Nick Larsen . Con base en los comentarios sobre la respuesta, esto podría ser más útil.
Sin golf:
fuente
PowerShell ,
204187 bytesPruébalo en línea!
Errores en la cadena nula ... ¿Alguien puede ayudar con esto?
Código de prueba (después de envolver el código en un bloque de secuencia de comandos y asignarlo a la variable $ Z ...):
Salida:
fuente