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 nile falsevaluta falso), quindi 1&&z==esrever.z* stupnon 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()*stupaggiungendo 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 *fooequivale 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!
printistruzione 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$tbooleano, TRUE se la stringa di input $zè palindromo, altrimenti FALSE$tIl 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.
evaldovrebbe 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 0per l'uguaglianza.
iinverte il ToS, così 0diventa 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.