Паліндромна перевірка паліндром [закрита]


37

Напишіть програму, щоб перевірити, чи є рядок паліндромною, з додатковою умовою, що програма сама буде паліндромною.


1
Якщо мова має коментарі до кінця, це тривіально, тому, мабуть, їх слід заборонити.
Joey

1
@Joey Я б із задоволенням відмовлявся від використання таких коментарів, але заборона їх після постановки питання суворо стосується тих, хто вже відповів. @ Відповідь Вентеро (єдиний, хто їх не використовує) - це шлях вперед по підрахунку голосів, тому всі, здається, згодні.
marcog

1
Що ж, для усунення подібних проблем раніше (це також виникало у подібному завданні на SO), ви можете використовувати пісочницю або лабораторію Puzzle ;-)
Joey

1
Як щодо нав'язування того, що програма повинна бути паліндромною кволею самої злої усмішки ;-)
Кіхотичний

4
Я знаю, що це давнє питання, але я думаю, що він потребує довільного критерію виграшу, наприклад, конкурс популярності або гольф-код. Питання не вказує жодного.
mbomb007

Відповіді:


34

Рубін

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не оцінюється і, таким чином, не може підняти виняток з виконання
  • Оператор splat / множення ( *): Щоб уникнути помилки синтаксису z=esrever.z stup, ми змушуємо аналізатор проаналізувати це як z=esrever.z()*stupшляхом додавання *. З іншого боку, the *аналізується як оператор splat, який у виклику функції розбиває масив на ряд параметрів. Якщо замість масиву є лише один елемент, він в основному нічого не робить, тому puts *fooеквівалентний puts foo.

Очевидне рішення за допомогою коментарів (друкує правду / хибність):

puts gets.reverse==$_#_$==esrever.steg stup

Чи можете ви пояснити, як це працює. Я не знаю рубіну.
mellamokb

@mellamokb: Я додав коротке пояснення. Повідомте мене, якщо це все ще не зрозуміло.
Вентеро

26

Пітон без коментарів

"a\";w=]1-::[w trinp;)(tupni_war=w;";w=raw_input();print w[::-1]==w;"\a"

Я здивований, що ще ніхто не знайшов цього фокусу, він повинен працювати більшістю мов!


2
Дуже розумно, мені подобається втеча цитата.
Вейн Вернер

Гарне рішення, ви навіть можете скинути printзаяву, і якщо ви дозволите введення вказаних у лапках, raw_input()можна скоротити до input(). Відсутній додатковий '=' на початку.
Віллем

видалено кінцевий вихід після істинного чи помилкового:"a\"#;w==]1-::[w;)(tupni_war=w;";w=raw_input();w[::-1]==w;#"\a"
Віллем

13

Perl

perl -nle "$s=$_ eq+reverse;print$s;s$tnirp;esrever+qe _$=s$"

жодних хитрощів щодо коментарів, просто вміло зловживаючи оператором заміни (ей, змінні perl починаються з $ теж, і що?)


7

Python 2.7

s=raw_input();print'YNEOS'[s!=s[::-1]::2]#]2::]1-::[s=!s['SOENY'tnirp;)(tupni_war=s

6

С

#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

не переможеш для стислості, але я вражений
Вейн Вернер

лол, розумний-lvl 11/10.
nymo

5

Гольфскрипт

.-1%=#=%1-.
  • просто з трюком з коментарями
  • введення без \ n наприкінці
  • виконувати відповідність знаків за знаком (навіть для пунктуації)
  • повертає 1 за успіх, 0 за невдачу

4

PHP

echo strrev($z)==$z;#;z$==)z$(verrts ohce

Факти:

  • $z рядок, вхідний рядок для перевірки
  • $tбулева, ІСТИНА, якщо вхідний рядок $zпаліндром, ЛІЖНІ в іншому випадку
  • Використовуючи коментарі, щоб допомогти мені зробити паліндром коду.
  • Виходи $t
  • Джерело саме є паліндром

Причина, через яку неможливо реалізувати паліндромний контролер паліндром у PHP, це тому, що змінні PHP названі починаючи з а $. Ви не можете закінчити ім'я ідентифікатора $на PHP.


2

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 та той факт, що для них вам не потрібен кінець.


2
Зрештою, перший код evalповинен бути lave.
Aycan Yaşıt

1

CoffeeScript

Я насправді боровся із зворотними написаннями "розділити", "повернути" та "приєднатися": \

p=(s)->s.split('').reverse().join('')==s#s==)''(nioj.)(esrever.)''(tilps.s>-)s(=p


1

Python 3, 55 байт

Використовує коментар, але коротший, ніж інший Python, який використовує коментарі.

s=input();print(s==s[::-1])#)]1-::[s==s(tnirp;)(tupni=s

1

Нечітка Окто Гуакамоле , 17 байт

^Cz.=i_;@;_i=.zC^

Не зовсім впевнений, як визначається виграш, але я ставлю кількість байтів вище.

^ отримує вхід і натискає на перший стек.

C копіює перший стек до другого.

z перевернути верхню частину стека, так що "як" стає "sa".

. зміщує активний стек, тому активний стек має вхід, а неактивний - зворотний вхід.

=перевірки рівності, повернення 0на рівність.

iінвертує ToS, так 0стає1 , і все інше в значній мірі стає False.

_ з'являється і встановлює змінну temp, яка ; потім друкує.

@закінчує програму вручну, щоб вона не потрапила на зворотну частину. Це робить паліндром.


0

Javascript

function a(b){return b==b.split('').reverse().join('')}//})''(nioj.)(esrever.)''(tilps.b==b nruter{)b(a noitcnuf

Важко це зробити без коментарів ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.