เขียนโปรแกรมเพื่อทดสอบว่าสตริงเป็น palindromic โดยมีเงื่อนไขเพิ่มเติมว่าโปรแกรมนั้นเป็น palindromic เอง
เขียนโปรแกรมเพื่อทดสอบว่าสตริงเป็น palindromic โดยมีเงื่อนไขเพิ่มเติมว่าโปรแกรมนั้นเป็น palindromic เอง
คำตอบ:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
พิมพ์ 1 ถ้าอินพุตเป็นพาลินโดรม 0 ถ้าไม่ใช่ อินพุตโดยไม่มีการหยุดพัก
ไม่ใช้ความคิดเห็นใด ๆ แต่ใช้ 2 เทคนิค:
0
เป็น True-ish ใน Ruby (เท่านั้นnil
และfalse
ประเมินเป็นเท็จ) ดังนั้นจึง1&&z==esrever.z* stup
ไม่ได้รับการประเมินและไม่สามารถยกข้อยกเว้นรันไทม์ได้*
): เพื่อหลีกเลี่ยงข้อผิดพลาดในไวยากรณ์z=esrever.z stup
เราบังคับตัวแยกวิเคราะห์ที่จะแยกนี้เป็นโดยการเพิ่มz=esrever.z()*stup
*
ในอีกด้านหนึ่ง*
จะแยกเป็นตัวดำเนินการ splat ซึ่งในการเรียกฟังก์ชั่นแยกอาร์เรย์ในชุดของพารามิเตอร์ หากมีเพียงองค์ประกอบหนึ่งแทนของอาร์เรย์นั้นโดยทั่วไปจะไม่ทำอะไรเพื่อให้เทียบเท่ากับputs *foo
puts foo
วิธีแก้ปัญหาที่ชัดเจนโดยใช้ความคิดเห็น (พิมพ์จริง / เท็จ):
puts gets.reverse==$_#_$==esrever.steg stup
Python ไม่มีความคิดเห็น
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
ฉันประหลาดใจที่ไม่มีใครพบกลอุบายดังกล่าว แต่มันควรจะทำงานในภาษาส่วนใหญ่
print
คำสั่งและหากคุณช่วยให้การป้อนข้อมูลเพื่อระบุล้อมรอบในราคาที่สามารถลงไปraw_input()
input()
ไม่มีการเพิ่ม '=' เมื่อเริ่มต้น
"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
perl -nle "$s=$_ eq+reverse;print$s;s$tnirp;esrever+qe _$=s$"
ไม่มีเทคนิคการแสดงความคิดเห็นเพียงแค่ใช้โอเปอเรเตอร์การทดแทนอย่างไม่เหมาะสม (เฮ้ตัวแปร Perl เริ่มต้นด้วย $ เกินไปดังนั้นจะเป็นอย่างไร)
s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s
#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#
ตัวอย่างการวิ่ง:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
.-1%=#=%1-.
echo strrev($z)==$z;#;z$==)z$(verrts ohce
ข้อเท็จจริง:
$z
string, อินพุตสตริงที่ต้องการตรวจสอบ$t
บูลีน, TRUE หากสตริงอินพุต$z
เป็น palindrome, FALSE มิฉะนั้น$t
เหตุผลที่ว่าทำไมมันจะไม่เป็นไปได้ที่จะดำเนินการตรวจสอบการ palindrome palindromic ใน PHP จะเป็นเพราะ PHP $
ตัวแปรที่มีชื่อเริ่มต้นด้วย คุณไม่สามารถจบชื่อตัวระบุด้วย$
ใน 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?>
ใช้เทคนิคแปลก ๆ บางอย่างเพื่อหลีกเลี่ยง$
ปัญหาในทางเทคนิคไม่ใช่ palindrome ในขณะที่ฉันต้องแอบเข้าไป;
ในตอนท้าย
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
นี่เป็นสิ่งที่ใช้งานได้ซึ่งใช้/* */
ความเห็นของ PHP และความจริงที่ว่าคุณไม่ต้องการจุดจบสำหรับพวกเขา
eval
lave
จริง ๆ แล้วฉันต่อสู้กับการสะกดแบบย้อนกลับของ 'แยก', 'ย้อนกลับ' และ 'เข้าร่วม': \
p=(s)->s.split('').reverse().join('')==s#s==)''(nioj.)(esrever.)''(tilps.s>-)s(=p
print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp
ใช้ความคิดเห็น แต่สั้นกว่า Python อื่นที่ใช้ความคิดเห็น
s=input();print(s==s[::-1])#)]1-::[s==s(tnirp;)(tupni=s
^Cz.=i_;@;_i=.zC^
ไม่แน่ใจว่าการชนะเป็นอย่างไร แต่ฉันนับจำนวนไบต์สูงสุด
^
รับอินพุตและผลักไปยังสแต็กแรก
C
คัดลอกสแต็กแรกไปที่สอง
z
กลับด้านบนของสแต็กดังนั้น "เป็น" กลายเป็น "sa"
.
เลื่อนสแต็กที่ใช้งานอยู่ดังนั้นสแต็กที่ใช้งานอยู่จะมีอินพุตและส่วนที่ไม่แอ็คทีฟจะมีอินพุตที่กลับด้าน
=
ตรวจสอบความเท่าเทียมกันกลับมา0
เพื่อความเท่าเทียมกัน
i
ตีความ ToS จึง0
กลายเป็นและสิ่งอื่นที่สวยมากจะกลายเป็น1
False
_
ปรากฏและตั้งค่าตัวแปร temp ที่;
พิมพ์แล้ว
@
สิ้นสุดโปรแกรมด้วยตนเองจึงไม่ตีส่วนที่ตรงกันข้าม นี่เองที่ทำให้ palindrome
function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf
ยากที่จะทำโดยไม่มีความคิดเห็น ...