Ha habido un par de intentos anteriores para hacer esta pregunta, pero ninguno se ajusta a los estándares modernos en este sitio. Según el debate sobre Meta , lo vuelvo a publicar de una manera que permita una competencia leal bajo nuestros modernos conjuntos de reglas.
Antecedentes
Un palíndromo es una cadena que "lee lo mismo hacia adelante y hacia atrás", es decir, el reverso de la cadena es el mismo que la cadena misma. No estamos hablando de "palíndromos convenientes" aquí, sino de una inversión estricta de carácter por carácter; por ejemplo, ()()
no es un palíndromo, pero lo ())(
es.
La tarea
Escriba un programa o función que tome una cadena S (o el equivalente apropiado en su idioma) como entrada, y tenga una salida Q (del tipo que elija). Puede utilizar cualquier medio razonable para tomar la entrada y proporcionar la salida.
- Cuando la entrada S es un palíndromo, la salida Q debe tener un valor A (que es el mismo para cualquier S palindrómico ).
- Cuando la entrada S no es un palíndromo, la salida Q debe tener un valor B (que es el mismo para cualquier S no palindrómico ).
- A y B deben ser distintos entre sí.
O en otras palabras: mapear todos los palíndromos a un valor, y todos los no palíndromos a otro.
Además, el programa o función que escriba debe ser un palíndromo en sí mismo (es decir, su código fuente debe ser palindrómico), lo que lo convierte en un desafío de fuente restringida .
Aclaraciones
- Aunque
true
yfalse
son opciones obvias para A y B , puede usar dos valores distintos para sus salidas "es un palíndromo" y "no es un palíndromo", que no necesitan ser booleanos. - Aquí estamos definiendo la inversión de cadena a nivel de personaje ;
éé
es palindrómico independientemente de si el programa está codificado en UTF-8 o Latin-1, a pesar de que no es una secuencia palindrómica de octetos después de la codificación UTF-8. - Sin embargo, incluso si su programa contiene caracteres no ASCII, solo necesita trabajar para la entrada ASCII. Específicamente, la entrada S solo contendrá caracteres ASCII imprimibles (incluido el espacio, pero no la nueva línea). Entre otras cosas, esto significa que si trata la entrada como una secuencia de bytes en lugar de una secuencia de caracteres, es probable que su programa cumpla con la especificación (a menos que la codificación de E / S de su idioma sea muy extraña). Como tal, la definición de un palíndromo en la viñeta anterior solo importa cuando se verifica que el programa tenga la forma correcta.
- Ocultar la mitad del programa en un comentario o cadena literal, sin ser creativo, es legal; se te califica por la longitud, no por la creatividad, así que siéntete libre de usar métodos "aburridos" para asegurarte de que tu programa sea un palíndromo. Por supuesto, debido a que su puntaje se basa en la duración, las partes de su programa que no hacen nada empeorarán su puntaje, por lo que poder usar ambas mitades de su programa probablemente sea útil si puede manejarlo. .
- Debido a que el criterio de victoria se mide en bytes, deberá especificar la codificación en la que está escrito su programa para poder calificarlo (aunque en muchos casos será obvio qué codificación está usando).
Criterio de victoria
Aunque el programa necesita ser un palíndromo a nivel de personaje, estamos usando bytes para ver quién gana. Específicamente, cuanto más corto sea su programa, medido en bytes, mejor; Este es un desafío de código de golf . Para permitir que se comparen los envíos (especialmente los envíos en el mismo idioma), coloque un recuento de bytes para su programa en el encabezado de su envío (más un recuento de caracteres, si difiere del número de bytes).
(
con a
y )
con b
. ¿Es abab
un palíndromo? No, tendría que ser así abba
. Entonces ()()
tampoco es un palíndromo; Tendría que ser ())(
.
()() is not a palindrome, but ())( is.
¡Felicitaciones, lo hiciste en reddit!