Bir dizginin palindromik olup olmadığını, programın kendisinin palindromik olması koşuluyla eklenmesi için bir program yazın.
Bir dizginin palindromik olup olmadığını, programın kendisinin palindromik olması koşuluyla eklenmesi için bir program yazın.
Yanıtlar:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Giriş bir palindrom ise 1, değilse 0 olur. Linebreak olmadan giriş yapın.
Herhangi bir yorum kullanmaz, bunun yerine 2 numara kullanır:
0
Ruby'de true-ish (yalnızca nil
ve false
yanlış olarak değerlendir), dolayısıyla 1&&z==esrever.z* stup
değerlendirilmez ve bu nedenle çalışma zamanı istisnası oluşturamaz*
): İçinde bir sözdizimi hatası z=esrever.z stup
oluşmasını önlemek için , ayrıştırıcıyı z=esrever.z()*stup
a ekleyerek ayrıştırmaya zorlarız *
. Diğer taraftan, *
işlev çağrısında bir dizi parametrede bir dizi bölen bir uyarıcı işleci olarak ayrıştırılır. Bir dizi yerine sadece bir eleman varsa, temel olarak hiçbir şey yapmaz, yani buna puts *foo
eşdeğerdir puts foo
.Yorumları kullanarak açık bir çözüm (doğru / yanlış yazdırır):
puts gets.reverse==$_#_$==esrever.steg stup
Yorum yapmadan Python
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Henüz kimsenin bu numarayı bulmadığına şaşırdım, çoğu dilde çalışması gerekiyor!
print
ifadeyi bile bırakabilirsiniz ve girişin tırnak içine alınmış olmasına izin verirseniz raw_input()
kısaltılabilir input()
. Başlangıçta fazladan '=' eksik.
"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#
Çalışan örnek:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Gerçekler:
$z
dize, kontrol edilecek girdi dizisi$t
boolean, giriş dizgisi $z
palindrome ise TRUE, FALSE aksi takdirde$t
PHP'de palindromic palindrome checker uygulamasının mümkün olmamasının nedeni PHP değişkenlerinin a ile başlanmasıdır $
. $
PHP ile bir tanımlayıcı ismini bitiremezsiniz.
<?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?>
$
Sorunu önlemek için bazı tuhaf hileler kullanır ;
, sonunda içeri gizlice girmek zorunda kaldığım için teknik olarak bir palindrome değildir .
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Bu PHP'nin /* */
yorumlarını kullanan ve onlar için sonun gerekmediği gerçeğini kullanan çalışan bir yazı .
eval
olmalı lave
.
print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp
^Cz.=i_;@;_i=.zC^
Kazanmanın nasıl tanımlandığından tam olarak emin değilim, ama bayt sayımını üste koydum.
^
girişi alır ve ilk yığına iter.
C
ilk yığını ikinciye kopyalar.
z
yığının üst kısmını ters çevirin, böylece "olduğu gibi" "sa" olur.
.
aktif yığını kaydırır, böylece aktif yığının girişi vardır ve inaktif olanın ters girişi vardır.
=
eşitliği kontrol eder, eşitliği geri döndürür 0
.
i
TO'yu ters çevirir, yani 0
olur 1
ve hemen hemen her şey olur False
.
_
açılır ve ;
sonra yazdırılan geçici değişkeni ayarlar .
@
programı manuel olarak sonlandırır, böylece tersine çevrilmiş parçayı vurmaz. Bu palindrom yapar.