Escreva um programa para testar se uma sequência é palindrômica, com a condição adicional de que o programa seja palindrômico.
Escreva um programa para testar se uma sequência é palindrômica, com a condição adicional de que o programa seja palindrômico.
Respostas:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Imprime 1 se a entrada for um palíndromo, 0 se não for. Entrada sem quebra de linha.
Não usa nenhum comentário, mas usa dois truques:
0
é true-ish no Ruby (apenas nil
e é false
avaliado como falso), portanto 1&&z==esrever.z* stup
não é avaliado e, portanto, não pode gerar uma exceção de tempo de execução*
): Para evitar um erro de sintaxe z=esrever.z stup
, forçamos o analisador a analisar isso como z=esrever.z()*stup
adicionando a *
. Por outro lado, o *
é analisado como um operador de splat, que em uma chamada de função divide um array em uma série de parâmetros. Se existe apenas um elemento em vez de uma matriz, basicamente não faz nada, então puts *foo
é equivalente a puts foo
.Solução óbvia usando comentários (imprime verdadeiro / falso):
puts gets.reverse==$_#_$==esrever.steg stup
Python sem comentário
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Estou surpreso que ninguém tenha encontrado esse truque ainda, ele deve funcionar na maioria dos idiomas!
print
instrução e, se você permitir que a entrada especificada entre aspas raw_input()
possa ser reduzida input()
. Faltando um '=' extra no início.
"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
#include <stdio.h> //
#include <string.h> //
int main() { //
char str[1024]; //
fgets(str, sizeof(str), stdin); //
int i = 0, j = strlen(str) - 2; //
for (; i < j; i++, j--) //
if (str[i] != str[j]) { //
printf("no\n"); //
return 0; //
} //
printf("yes\n"); //
} //
// }
// ;)"n\sey"(ftnirp
// }
// ;0 nruter
// ;)"n\on"(ftnirp
// { )]j[rts =! ]i[rts( fi
// )--j ,++i ;j < i ;( rof
// ;2 - )rts(nelrts = j ,0 = i tni
// ;)nidts ,)rts(foezis ,rts(stegf
// ;]4201[rts rahc
// { )(niam tni
// >h.gnirts< edulcni#
// >h.oidts< edulcni#
Exemplo em execução:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Fatos:
$z
string, a string de entrada para verificar$t
booleano, TRUE se a sequência de entrada $z
for palíndromo, FALSE caso contrário$t
A razão pela qual não será possível implementar o verificador palíndromo palíndromo no PHP é porque as variáveis PHP são nomeadas começando com a $
. Você não pode terminar um nome de identificador com $
no PHP.
<?php eval/*/*/(';{$i=fgets(STDIN,2e9);};{$a="strrev";}{var_dump("{$i}"=="{$a($i)}");}/*}{*\{;("{(tupni$)a$}"=="{putni$}")ohce}{;"verrts"==a$};{;(9e2,NIDTS)stegf=i$);');/*\*\eval php?>
Usa alguns truques estranhos para evitar o $
problema, tecnicamente não é um palíndromo, pois eu tive que me infiltrar ;
no final.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Este é um trabalho que usa os /* */
comentários do PHP e o fato de que você não precisa do fim para eles.
eval
deve ser lave
.
^Cz.=i_;@;_i=.zC^
Não sei exatamente como a vitória está definida, mas eu coloco a contagem de bytes no topo.
^
obtém a entrada e a envia para a primeira pilha.
C
copia a primeira pilha para a segunda.
z
inverta a parte superior da pilha, para que "as" se torne "sa".
.
muda a pilha ativa, para que a pilha ativa tenha a entrada e a inativa a entrada reversa.
=
verifica a igualdade, retornando 0
à igualdade.
i
inverte os ToS, 0
torna - se 1
, e qualquer outra coisa se torna False
.
_
aparece e define a variável temp que é ;
impressa.
@
finaliza o programa manualmente, para não atingir a parte invertida. Isso faz o palíndromo.