Tulis sebuah program untuk menguji apakah suatu string adalah palindromik, dengan syarat tambahan bahwa program tersebut menjadi palindromik itu sendiri.
Tulis sebuah program untuk menguji apakah suatu string adalah palindromik, dengan syarat tambahan bahwa program tersebut menjadi palindromik itu sendiri.
Jawaban:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Mencetak 1 jika inputnya adalah palindrome, 0 jika tidak. Masukan tanpa linebreak.
Tidak menggunakan komentar apa pun, melainkan menggunakan 2 trik:
0adalah true-ish di Ruby (hanya nildan falsebernilai false), jadi 1&&z==esrever.z* stuptidak dievaluasi dan dengan demikian tidak dapat meningkatkan pengecualian runtime*): Untuk menghindari kesalahan sintaksis dalam z=esrever.z stup, kami memaksa pengurai untuk mem-parsing ini z=esrever.z()*stupdengan menambahkan a *. Di sisi lain, *diurai sebagai operator percikan, yang dalam panggilan fungsi membagi array dalam serangkaian parameter. Jika hanya ada satu elemen, bukan array, pada dasarnya tidak melakukan apa-apa, jadi puts *foosetara dengan puts foo.Solusi jelas menggunakan komentar (cetak benar / salah):
puts gets.reverse==$_#_$==esrever.steg stup
Python tanpa komentar
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Saya terkejut bahwa belum ada yang menemukan trik itu, itu seharusnya bekerja di sebagian besar bahasa!
printpernyataan dan jika Anda membiarkan input yang ditentukan terlampir dalam kutipan raw_input()dapat dipersingkat input(). Kehilangan '=' ekstra di awal.
"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#
Contoh menjalankan:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Fakta:
$z string, string input untuk diperiksa$tboolean, TRUE jika string input $zadalah palindrome, FALSE sebaliknya$tAlasan mengapa tidak mungkin untuk mengimplementasikan palindrome palindromic checker di PHP itu karena variabel PHP diberi nama dimulai dengan a $. Anda tidak dapat mengakhiri nama pengenal dengan $di 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?>
Menggunakan beberapa trik aneh untuk menghindari $masalah ini, secara teknis bukanlah sebuah palindrom karena saya harus menyelinap ;masuk pada akhirnya.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Ini adalah yang berfungsi yang menggunakan /* */komentar PHP dan fakta bahwa Anda tidak memerlukannya.
evalseharusnya lave.
^Cz.=i_;@;_i=.zC^
Tidak begitu yakin bagaimana kemenangan didefinisikan, tetapi saya menempatkan jumlah byte di bagian atas.
^ mendapatkan input dan mendorongnya ke tumpukan pertama.
C menyalin tumpukan pertama ke tumpukan kedua.
z membalikkan bagian atas tumpukan, jadi "as" menjadi "sa".
. menggeser tumpukan aktif, sehingga tumpukan aktif memiliki input, dan yang tidak aktif memiliki input terbalik.
=memeriksa kesetaraan, mengembalikan 0kesetaraan.
imembalik ToS, jadi 0menjadi 1, dan apa pun menjadi cukup banyak False.
_muncul dan atur variabel temp yang ;kemudian dicetak.
@mengakhiri program secara manual, sehingga tidak mengenai bagian yang terbalik. Ini membuat palindrome.