Si alguna vez has intentado escribir código palindrómico antes, sabrías cuántos corchetes tienden a interponerse en tu camino. ()()
no es un palíndromo, a pesar de que se ve un poco como debería ser, al tiempo ())(
, y ()(
son a la vez capicúa y ambos mirando muy tonta. ¿No sería conveniente si fuera al revés?
Una cadena es convenientemente palindrómica si es igual a la cadena derivada cuando su reverso tiene todos sus paréntesis ( ()
), corchetes ( []
) y llaves ( {}
) invertidos. Ningún otro personaje es especial y requiere voltear. (a <>
veces se combinan, pero a menudo no, por lo que se dejan fuera).
Su tarea es escribir, en su idioma, un programa (tomando entradas en STDIN) o una función (tomando un argumento de cadena única) que (a) da un valor verdadero consistente * cuando su argumento es convenientemente palindrómico y un falso falso diferente y consistente valor de otro modo, y (b) es en sí convenientemente palindrómica.
Por ejemplo, las siguientes entradas son convenientemente palindrómicas:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
Y los siguientes no son:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
No puede confiar en ningún estado externo (nombre de archivo específico, estructura de directorio, otra entrada del usuario, acceso web, etc.), excepto las banderas de intérprete / compilador.
Además, no puede usar "el truco de comentarios" en el que comenta o deja sin usar algún fragmento de código aprovechando las funciones de comentarios de su idioma. Por ejemplo, todo lo siguiente no está permitido, porque contienen partes no funcionales que pueden eliminarse o destruirse de manera segura (a costa de perder convenientemente la palindrómica):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Obviamente, esto podría no cubrir cada uno de estos casos, pero el espíritu del desafío aquí es no usar comentarios y código no analizado ** para lograr palindrominess, en lugar de utilizar los paréntesis y paréntesis corregidos. Te estoy mirando, LISP, Brainfuck.
Este es un código de golf , por lo que gana el código más corto, pero todas las longitudes de código son bienvenidas.
* Por valores consistentes de verdadero y falso, quiero decir que puede devolver uno de un par de valores, como 1
verdadero y 0
falso, o False
verdadero y "no"
falso, siempre que estos valores sean diferentes entre sí y no cambiar de ejecución a ejecución de su programa. Usa lo que te salve personajes.
** No debe confundirse con no ejecutado : el código que es válido y puede hacer cosas raras pero nunca llamado está bien.
(eslaf)fi
, puedes usarlo if(false)
.
()()
no es un palíndromo
if(false){some code}
o variables no utilizadas? ¿Están permitidos?