Napisz program, aby sprawdzić, czy ciąg jest palindromiczny, z dodatkowym warunkiem, że sam program będzie palindromiczny.
Napisz program, aby sprawdzić, czy ciąg jest palindromiczny, z dodatkowym warunkiem, że sam program będzie palindromiczny.
Odpowiedzi:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Drukuje 1, jeśli wejście jest palindromem, 0, jeśli nie jest. Wejście bez podziału linii.
Nie używa żadnych komentarzy, zamiast tego używa 2 lew:
0
w Rubim jest prawdziwy (tylko nil
i false
oceniany jako fałszywy), więc 1&&z==esrever.z* stup
nie jest analizowany, a zatem nie może zgłosić wyjątku czasu wykonywania*
): Aby uniknąć błędu składniowego z=esrever.z stup
, zmuszamy parser do przeanalizowania tego z=esrever.z()*stup
przez dodanie *
. Z drugiej strony *
parsowany jest jako operator splat, który w wywołaniu funkcji dzieli tablicę na szereg parametrów. Jeśli zamiast tablicy jest tylko jeden element, w zasadzie nic nie robi, więc puts *foo
jest równoważny puts foo
.Oczywiste rozwiązanie z wykorzystaniem komentarzy (drukuje prawda / fałsz):
puts gets.reverse==$_#_$==esrever.steg stup
Python bez komentarza
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Dziwi mnie, że nikt jeszcze nie znalazł tej sztuczki, powinna działać w większości języków!
print
instrukcję, a jeśli pozwolisz, aby dane wejściowe określone w cudzysłowach raw_input()
można było skrócić input()
. Brakuje dodatkowego „=” na początku.
"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#
Przykład działania:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Fakty:
$z
ciąg wejściowy ciąg do sprawdzenia$t
wartość logiczna, PRAWDA, jeśli ciąg wejściowy $z
jest palindromem, w przeciwnym razie FAŁSZ$t
Powodem, dla którego nie będzie możliwe zaimplementowanie palindromowego kontrolera palindromów w PHP, jest to, że zmienne PHP są nazwane od $
. Nie można zakończyć nazwy identyfikatora $
w 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?>
Używa kilku dziwnych sztuczek, aby uniknąć tego $
problemu, technicznie nie jest to palindrom, ponieważ musiałem podkraść się ;
na końcu.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Jest to działający, który wykorzystuje /* */
komentarze PHP i fakt, że nie potrzebujesz dla nich końca.
eval
powinien być pierwszy kod lave
.
print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp
^Cz.=i_;@;_i=.zC^
Nie jestem do końca pewien, jak zdefiniowano wygraną, ale umieszczam bajt na górze.
^
pobiera dane wejściowe i wypycha je do pierwszego stosu.
C
kopiuje pierwszy stos na drugi.
z
odwróć górę stosu, aby „as” zmienia się w „sa”.
.
przesuwa aktywny stos, więc aktywny stos ma dane wejściowe, a nieaktywny ma dane odwrócone.
=
sprawdza równość, wraca 0
do równości.
i
odwraca ToS, a więc 0
staje się 1
i wszystko inne staje się właściwie False
.
_
wyskakuje i ustawia zmienną temp, którą ;
następnie drukuje.
@
kończy program ręcznie, aby nie uderzył w odwróconą część. To sprawia, że palindrom.
function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf
Trudno to zrobić bez komentarzy ...