Scrivi un programma per verificare se una stringa è palindromica, con l'aggiunta della condizione che il programma sia palindromico stesso.
Scrivi un programma per verificare se una stringa è palindromica, con l'aggiunta della condizione che il programma sia palindromico stesso.
Risposte:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Stampa 1 se l'input è un palindromo, 0 se non lo è. Input senza interruzione di riga.
Non utilizza alcun commento, invece utilizza 2 trucchi:
0
è vero in Ruby (solo nil
e false
valuta falso), quindi 1&&z==esrever.z* stup
non viene valutato e quindi non può sollevare un'eccezione di runtime*
): per evitare un errore di sintassi in z=esrever.z stup
, forziamo il parser a analizzarlo come z=esrever.z()*stup
aggiungendo a *
. Dall'altro lato, *
viene analizzato come operatore splat, che in una chiamata di funzione divide un array in una serie di parametri. Se c'è solo un elemento invece di un array, sostanzialmente non fa nulla, quindi puts *foo
equivale a puts foo
.Soluzione ovvia usando i commenti (stampa vero / falso):
puts gets.reverse==$_#_$==esrever.steg stup
Python senza commento
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Sono sorpreso che nessuno abbia ancora trovato quel trucco, dovrebbe funzionare nella maggior parte delle lingue!
print
istruzione e se consenti l'input tra le specifiche racchiuse tra virgolette, raw_input()
puoi accorciarle input()
. Manca un '=' extra all'inizio.
"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#
Esempio corrente:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
I fatti:
$z
stringa, la stringa di input da verificare$t
booleano, TRUE se la stringa di input $z
è palindromo, altrimenti FALSE$t
Il motivo per cui non sarà possibile implementare il checker palindromo palindromo in PHP è perché le variabili PHP hanno un nome che inizia con a $
. Non puoi terminare un nome identificativo con $
in 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 alcuni trucchi per evitare il $
problema, tecnicamente non è un palindromo poiché alla fine ho dovuto intrufolarmi di soppiatto ;
.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Questo è un lavoro che utilizza i /* */
commenti di PHP e il fatto che non hai bisogno della fine per loro.
eval
dovrebbe essere lave
.
^Cz.=i_;@;_i=.zC^
Non sono sicuro di come sia definita la vincita, ma ho messo il byte in alto.
^
ottiene l'input e lo spinge al primo stack.
C
copia il primo stack nel secondo.
z
inverti la cima della pila, così "come" diventa "sa".
.
sposta lo stack attivo, quindi lo stack attivo ha l'input e quello inattivo ha l'input invertito.
=
controlla l'uguaglianza, ritornando 0
per l'uguaglianza.
i
inverte il ToS, così 0
diventa 1
, e qualsiasi altra cosa praticamente diventa False
.
_
apre e imposta la variabile temp che ;
poi stampa.
@
termina il programma manualmente, quindi non colpisce la parte invertita. Questo rende il palindromo.