Se você já tentou escrever código palindrômico antes, saberia quantos colchetes tendem a atrapalhar. ()()
não é um palíndromo, embora kinda parece que deve ser, ao mesmo tempo ())(
e ()(
são ambos palíndromo e ambos muito burra procurando. Não seria conveniente se fosse o contrário?
Uma string é convenientemente palíndrica se for igual à string derivada quando seu reverso tiver todos os seus parênteses ( ()
), colchetes ( []
) e chaves ( {}
) invertidos. Nenhum outro caractere é especial e requer inversão. ( <>
às vezes são emparelhados, mas geralmente não são excluídos.)
Sua tarefa é escrever, em seu idioma, um programa (com entrada no STDIN) ou uma função (com um argumento de cadeia única) que (a) forneça um valor verdadeiro consistente * quando seu argumento for convenientemente palindrômico e um falso diferente e consistente valor caso contrário, e (b) é ele próprio convenientemente palindrômico.
Por exemplo, as seguintes entradas são convenientemente palíndricas:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
E o seguinte não é:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Você não pode confiar em nenhum estado externo (nome do arquivo específico, estrutura de diretórios, outras entradas do usuário, acesso à web etc.), exceto sinalizadores de interpretador / compilador.
Além disso, você não pode usar o "truque de comentários" em que comenta ou processa um pedaço de código não utilizado, aproveitando os recursos de comentários do seu idioma. Por exemplo, todos os itens a seguir não são permitidos, porque contêm peças não funcionais que podem ser removidas ou destruídas com segurança (às custas da perda conveniente de palindrômico):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Obviamente, isso pode não abranger todos os casos, mas o espírito do desafio aqui não é usar comentários e código não analisado ** para obter palindrominess, em vez disso, usar os parênteses e parênteses corrigidos. Estou olhando para você, LISP, Brainfuck.
Este é um código de golfe , portanto o código mais curto vence, mas todos os comprimentos de código são bem-vindos.
* Por valores verdadeiros e falsos consistentes, quero dizer que você pode retornar um de um par de valores, como 1
verdadeiro e 0
falso, ou False
verdadeiro e "no"
falso, desde que esses valores sejam diferentes um do outro e não mude de execução para execução do seu programa. Use o que salvar seus personagens.
** Não deve ser confundido com não executado : código válido e que pode fazer coisas estranhas, mas nunca chamado, é bom.
(eslaf)fi
, você começa a usar if(false)
.
()()
não é um palíndromo
if(false){some code}
variáveis não utilizadas? Eles são permitidos?