Viết chương trình để kiểm tra xem một chuỗi có phải là palindromic hay không, với điều kiện được thêm vào là chính chương trình đó là palindromic.
Viết chương trình để kiểm tra xem một chuỗi có phải là palindromic hay không, với điều kiện được thêm vào là chính chương trình đó là palindromic.
Câu trả lời:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
In 1 nếu đầu vào là một bảng màu, 0 nếu không. Đầu vào không có ngắt dòng.
Không sử dụng bất kỳ nhận xét nào, thay vào đó, nó sử dụng 2 thủ thuật:
0
là true-ish trong Ruby (chỉ nil
và false
đánh giá thành false), do đó 1&&z==esrever.z* stup
không được đánh giá và do đó không thể tăng ngoại lệ thời gian chạy*
): Để tránh lỗi cú pháp z=esrever.z stup
, chúng tôi buộc trình phân tích cú pháp phân tích cú pháp này z=esrever.z()*stup
bằng cách thêm a *
. Mặt khác, cái *
được phân tích cú pháp như một toán tử splat, trong một lệnh gọi hàm chia một mảng trong một chuỗi các tham số. Nếu chỉ có một phần tử thay vì một mảng, thì về cơ bản nó không có gì, puts *foo
tương đương với puts foo
.Giải pháp rõ ràng bằng cách sử dụng nhận xét (in đúng / sai):
puts gets.reverse==$_#_$==esrever.steg stup
Python không có bình luận
"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"
Tôi ngạc nhiên khi chưa ai tìm thấy mánh khóe đó, nó sẽ hoạt động với hầu hết các ngôn ngữ!
print
câu lệnh và nếu bạn cho phép đầu vào được chỉ định kèm theo trong dấu ngoặc kép raw_input()
có thể được rút ngắn thành input()
. Thiếu thêm '=' khi bắt đầu.
"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#
Chạy ví dụ:
$ gcc -std=c99 c.c && ./a.out
blahalb
yes
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Sự thật:
$z
chuỗi, chuỗi đầu vào để kiểm tra$t
boolean, TRUE nếu chuỗi đầu vào $z
là palindrom, FALSE nếu không$t
Lý do tại sao không thể triển khai trình kiểm tra palindromic palindromic trong PHP bởi vì các biến PHP được đặt tên bắt đầu bằng a $
. Bạn không thể kết thúc một tên định danh bằng $
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?>
Sử dụng một số thủ thuật kỳ quặc để tránh $
vấn đề này, về mặt kỹ thuật không phải là một palindrom khi tôi phải lẻn ;
vào cuối.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Đây là một tác phẩm sử dụng các /* */
bình luận của PHP và thực tế là bạn không cần kết thúc cho chúng.
eval
nên được lave
.
print args[0]==args[0].reverse()?1:0//0:1?)(esrever.]0[sgra==]0[sgra tnirp
^Cz.=i_;@;_i=.zC^
Không chắc chắn chính xác làm thế nào chiến thắng được xác định, nhưng tôi đặt số byte lên hàng đầu.
^
lấy đầu vào và đẩy nó vào ngăn xếp đầu tiên.
C
sao chép ngăn xếp thứ nhất sang ngăn thứ hai.
z
đảo ngược đỉnh của ngăn xếp, vì vậy "as" trở thành "sa".
.
thay đổi ngăn xếp hoạt động, vì vậy ngăn xếp hoạt động có đầu vào và ngăn không hoạt động có đầu vào đảo ngược.
=
kiểm tra sự bình đẳng, trở lại 0
bình đẳng.
i
đảo ngược ToS, vì vậy 0
trở thành 1
, và bất cứ điều gì khác gần như trở thành False
.
_
bật và đặt biến temp mà ;
sau đó in.
@
kết thúc chương trình một cách thủ công, vì vậy nó không đạt phần đảo ngược. Điều này làm cho palindrom.