Напишіть програму, щоб перевірити, чи є рядок паліндромною, з додатковою умовою, що програма сама буде паліндромною.
Напишіть програму, щоб перевірити, чи є рядок паліндромною, з додатковою умовою, що програма сама буде паліндромною.
Відповіді:
z=gets;puts *z.reverse==z&&1||0||1&&z==esrever.z* stup;steg=z
Друкує 1, якщо вхід є паліндром, 0, якщо це не так. Введення без розриву рядків
Не використовує жодних коментарів, натомість використовує 2 прийоми:
0є справжнім-ish в Ruby (тільки nilі falseоцінюється до false), тому 1&&z==esrever.z* stupне оцінюється і, таким чином, не може підняти виняток з виконання*): Щоб уникнути помилки синтаксису z=esrever.z stup, ми змушуємо аналізатор проаналізувати це як z=esrever.z()*stupшляхом додавання *. З іншого боку, the *аналізується як оператор splat, який у виклику функції розбиває масив на ряд параметрів. Якщо замість масиву є лише один елемент, він в основному нічого не робить, тому puts *fooеквівалентний puts foo.Очевидне рішення за допомогою коментарів (друкує правду / хибність):
puts gets.reverse==$_#_$==esrever.steg stup
Пітон без коментарів
"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"
#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
echo strrev($z)==$z;#;z$==)z$(verrts ohce
Факти:
$z рядок, вхідний рядок для перевірки$tбулева, ІСТИНА, якщо вхідний рядок $zпаліндром, ЛІЖНІ в іншому випадку$tПричина, через яку неможливо реалізувати паліндромний контролер паліндром у 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?>
Використовує кілька дивних хитрощів, щоб уникнути $проблеми, технічно це не паліндром, як мені довелося підкрастися ;в кінці.
<?php $i = fgets(STDIN,2e9); echo $i == strrev($i);/*\;(i$)verrts == i$ ohce ;(9e2, NIDTS)stegf = $i php?>
Це робочий, який використовує /* */коментарі PHP та той факт, що для них вам не потрібен кінець.
evalповинен бути lave.
^Cz.=i_;@;_i=.zC^
Не зовсім впевнений, як визначається виграш, але я ставлю кількість байтів вище.
^ отримує вхід і натискає на перший стек.
C копіює перший стек до другого.
z перевернути верхню частину стека, так що "як" стає "sa".
. зміщує активний стек, тому активний стек має вхід, а неактивний - зворотний вхід.
=перевірки рівності, повернення 0на рівність.
iінвертує ToS, так 0стає1 , і все інше в значній мірі стає False.
_ з'являється і встановлює змінну temp, яка ; потім друкує.
@закінчує програму вручну, щоб вона не потрапила на зворотну частину. Це робить паліндром.