Я паліндром. Ти?


103

Було кілька попередніх спроб задати це питання, але вони не відповідають сучасним стандартам на цьому сайті. За дискусію про Meta , я репостую її таким чином, що дозволяє сумлінно конкурувати за нашими сучасними наборами правил.

Фон

є рядком, «зчитує ті ж вперед і назад», тобто в зворотній послідовності така ж , як і сама рядок. Тут ми не говоримо про "зручні паліндроми", а про суворому перевороті символів; наприклад, ()()не є паліндром, але ())(є.

Задача

Напишіть програму або функцію, яка приймає рядок S (або відповідний еквівалент у вашій мові) як вхідний і має один вихід Q (типу на ваш вибір). Ви можете скористатися будь-якими розумними засобами, щоб взяти вклад і забезпечити вихід.

  • Коли вхід S - паліндром, вихід Q повинен мати значення A (те саме для будь-якого паліндромного S ).
  • Коли вхід S не є паліндром, вихід Q повинен мати значення B (те саме для будь-якого непаліндромного S ).
  • A і B повинні відрізнятися один від одного.

Або іншими словами: зіставити всі паліндрами на одне значення, а всі непаліндри на інше.

Крім того, програма або функція, яку ви пишете, повинна бути самим паліндром (тобто її вихідний код повинен бути паліндромним), що робить це з .

Роз'яснення

  • Хоча trueі falseочевидний вибір для A і B , ви можете використовувати будь-які два різних значення для результатів "є паліндром" і "не є паліндром", які не повинні бути булевими.
  • Тут ми визначаємо обертання рядків на рівні символів ;ééє паліндромною незалежно від того, програма кодується в UTF-8 або Latin-1, навіть якщо це не паліндромна послідовність октетів після кодування UTF-8.
  • Однак, навіть якщо ваша програма містить символи, що не належать до ASCII, вона повинна працювати лише для введення ASCII. Зокрема, вхід S міститиме лише символи для друку ASCII (включаючи пробіл, але не включаючи новий рядок). Крім усього іншого, це означає, що якщо ви ставитеся до вводу як послідовності байтів, а не як послідовності символів, ваша програма все одно, можливо, буде відповідати специфікації (якщо тільки кодування вводу / виводу вашої мови не дуже дивне). Отже, визначення паліндром у попередній кулі має значення лише при перевірці, чи програма має правильну форму.
  • Приховування половини програми в коментарях або рядкових літералах, хоча і не створюється, є законним; вас забивають на довжину, а не на творчість, тому сміливо використовуйте "нудні" методи, щоб переконатися, що ваша програма є паліндром. Звичайно, оскільки ви набираєте величину за довжиною, частини вашої програми, які нічого не роблять, погіршать ваш результат, тому можливість використання обох половин вашої програми, ймовірно, буде корисною, якщо ви зможете керувати нею. .
  • Оскільки критерій перемоги вимірюється в байтах, вам потрібно буде вказати кодування, в яке написана ваша програма, щоб мати можливість її оцінювати (хоча в багатьох випадках буде очевидно, яке кодування ви використовуєте).

Критерій перемоги

Незважаючи на те, що програма повинна бути паліндром на рівні символів, ми використовуємо байти, щоб побачити, хто виграє. Зокрема, чим коротше ваша програма, вимірюється в байтах, тим краще; це проблема з . Для того, щоб дозволити порівняння подань (особливо подань на тій же мові), розмістіть кількість байтів для вашої програми в заголовку вашої заявки (плюс кількість символів, якщо вона відрізняється від кількості байтів).


12
Хтось, будь ласка, пояснить, чому () () не буде паліндром ??
Еміліо М Бумачар

58
@EmilioMBumachar Спробуйте замінити (на aі )на b. Є чи ababпаліндром? Ні, мав би бути abba. Тоді ()()також не паліндром; це мало б бути ())(.
DLosc

7
Ці рішення повністю використовуються коментарями, щоб зробити програму паліндромною схожою на лазівку :(
kennytm

15
@kennytm Заборонити їх було б гірше, тому що немає задовільного способу зробити це об'єктивно мовно-агностичним способом. (Що за коментар? Як щодо введення невикористаної половини в рядковий літерал, який відкидається? Що щодо 2D мов, де ви можете мати ідеально виконаний код, який просто ніколи не дійшов?)
Martin Ender

Відповіді:


137

Брахілог (2), 3 байти на сторінці коду Брахілога

I↔I

Спробуйте в Інтернеті!

Це повна програма, яка приймає введення за допомогою стандартного вводу (використовуючи синтаксис Брахілога для констант, тобто рядки укладені в подвійні лапки), а виводиться через стандартний вихід. Виходи призначені true.для паліндромного введення таfalse. для неаліндромного вводу.

Ця програма не тільки паліндромна, вона також має ліву / праву (і, можливо, в деяких шрифтах вгору / вниз) дзеркальну симетрію.

Пояснення

У Брахілозі великими літерами позначають точки програми, які мають однакові значення; це використовується майже як електричний ланцюг для передачі інформації з однієї частини програми в іншу. Одним із наслідків цього є те, що якщо ви укладете команду між однаковою парою великих літер, ви ефективно стверджуєте, що введення та вихід команди однакові. Брахілог неявно приймає введення, тому в цьому випадку ми також стверджуємо, що вхід до команди є таким же, як і вхід до програми. У цій програмі ми використовуємо команду , яка ревертує речі (в даному випадку рядки); тому програма ефективно стверджує, що вхід однаковий вперед і назад.

Повна програма (на відміну від функції) в Брахілозі повертає логічне значення, false.якщо немає можливості зробити всі твердження в програмі правильними відразу, або true.якщо твердження в програмі всі сумісні між собою. У нас є лише одне твердження - те, що повернення вводу не змінює його - тому програма виконує функцію перевірки паліндром.


49
І обертальна симетрія на 180 градусів, це прекрасно.
Атако

7
... і симетрія вздовж вертикальної та горизонтальної осей :-)
Луїс Мендо

13
@SteakOverflow Brachylog використовує користувальницьку кодову сторінку , тому ці символи не кодуються у UTF-8
DJMcMayhem

4
Я приєднався до цієї спільноти лише для того, щоб проголосувати цю програму. Ого.
Білл Мішель

4
@ATaco Поєднання лівої / правої та вгору / вниз симетрії передбачає обертальну симетрію на 180 градусів. ;)
Ерік Думініл

55

Pyth , 3 байти

_I_

Повертає істинне чи помилкове .

Спробуйте в Інтернеті!

Як це працює

  _  Reverse the input.
_I   Invariant-reverse; test if the reversed input is equal to its reverse.

1
Навіщо тобі потрібен фінал _?
busukxuan

34
@busukxuan З питання "Крім того, програма чи функція, яку ви пишете, повинні бути самим паліндром"
isaacg

1
Чому так багато пропозицій ... Ця відповідь не здається складною придумати ...?
ghosts_in_the_code

1
Я так гадаю. Все-таки це видається несправедливим. На деякі питання потрібно відповісти багато важкої роботи, а на інші набагато простіше. І все-таки виплата однакова. До речі, я також схвалив: P
ghosts_in_the_code

4
@ghosts_in_the_code Лише одна моя відповідь із 100+ була складною для написання, але є відповіді, на які я витратив дні, на які отримав лише кілька нагород. Зрештою, все вирівнюється ...
Денніс


33

Желе , 5 байт

ḂŒ
ŒḂ

Повертає 1 або 0 . Перший рядок - невиконаний помічник, другий рядок викликає тест паліндром.

Спробуйте в Інтернеті!


вау, недавнє доповнення.
Джонатан Аллан

6
Так, всього 18 годин.
Денніс

ви не вказали кодування. Я здогадуюсь UTF-8?
Брайан Мінтон

1
@BrianMinton Ні, це буде 11 байт в UTF-8. Jelly використовує цю кодову сторінку .
Денніс

@Dennis, дякую за інформацію.
Брайан Мінтон


23

Математика, 23 байти

QemordnilaP;PalindromeQ

Не дуже цікаво, але заради повноти ...

Вище, CompoundExpressionякий обчислює PalindromeQ, вбудований , який вирішує проблему. QemordnilaPпросто невизначений ідентифікатор, який ігнорується через ;.


21

Haskell, 87 85 44 34 байт

p=(==)<*>reverse--esrever>*<)==(=p

Пояснення: ((->) a)це екземпляр Applicative (спасибі @faubiguy), <*>визначений як

(<*>) f g x = f x (g x)

Отже, замінивши аргументи, можна побачити, чому це працює.


1
Чи можете ви пояснити код?
блі

1
@bli все після --- це коментар.
theonlygusti

3
@theonlygusti Haskell є достатньо чужим, що допомагає лише половина.
Якк,

@Yakk Це якась - то комбінація з (==), reverseі idфункції ( idфункція ідентичності).
tbodt

Ви можете зберегти 10 байт, скориставшись <*>замість цього <$>та видаливши<*>id
faubi



16

MATL , 7 байт

tPX=XPt

Спробуйте в Інтернеті!

Повертається [1; 1] для паліндромного введення та [0; 0] інакше.

t       % duplicate the input
P       % reverse the second string
X=      % check the two strings are exactly equal (returns 0 or 1)
XP      % flip array (does nothing)
t       % duplicate the answer, giving either [1;1] or [0;0]
        % (implicit) convert to string and display

15

Піп , 12 11 байт

Тепер без коментарів!

x:RVaQaVR:x

Приймає введення як аргумент командного рядка; виходи 1для паліндром, 0для непаліндром. Спробуйте в Інтернеті!

Суть того , що ми хочемо зробити , це RVaQa: reverse(a) string-equals a. Код x:RVaQaобчислює цей результат і присвоює йому x. Потім VR:xприсвоює значення xзмінноїVR . Оскільки це призначення є останньою заявою в програмі, його значення також автоматично віддруковане. Вуаля!

Для попередньої цікавої версії, що використовує певну не визначену поведінку, дивіться історію редагування.



9

R, 111 103 байт

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))#))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

Не найоригінальніша відповідь. #є символом коментаря в R

Безголовки:

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))
#
))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

Рядок символів з scanперетворюється в необроблені байти завдяки charToRawфункції. Ці необроблені байти порівнюються один за одним зі своїми аналогами за rev()функцією, яка змінює порядок його аргументу. Вихід цієї частини є вектором TRUEта / або FALSE.
Потім allфункція виводить, TRUEякщо всі ці елементи єTRUE

Тут, "\n"в scanфункції необхідно для входів з більш ніж одним словом.

Попередня відповідь (у байтах), 81 байт

function(s)all((s=charToRaw(s))==rev(s))#))s(ver==))s(waRoTr‌​ahc=s((lla)s(noitcnu‌​f

з - 24 байти завдяки @rturnbull .


Ви можете зберегти кілька добрих байтів, виконавши charToRawперетворення перед призначенням sта змінивши спосіб встановлення sepаргументу scan:all((s<-charToRaw(scan(,"",,,"\n")))==rev(s))#))s(ver==)))"n\",,,"",(nacs(waRoTrahc-<s((lla
rturnbull

(Крім того, цей підхід не працює, наприклад, для введення ééпід кодуванням UTF-8, але я не думаю, що це порушує правила виклику.)
rturnbull,

@rturnbull: дякую за вклад! Я дійсно протестований ééз latin1кодуванням.
Фредерік

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

Я не дуже впевнений, що попередня версія порушує правила. ОП заявляє: "Крім усього іншого, це означає, що якщо ви ставитеся до вводу як послідовності байтів, а не як послідовності символів, ваша програма все одно буде відповідати специфікації (якщо тільки кодування вводу / виводу вашої мови не дуже дивне). "
rturnbull

8

RProgN , 11 байт

~]S.E E.S]~

Перша половина цього робить все важке підняття, а зручністю RProgN, друга половина - неоперація.

~]S.E E.S]~
~           # Treat the word as a Zero Space Segment
 ]          # Duplicate the top of the stack
  S.        # Reverse the top of the stack
    E       # Compare if these values are equal
      E.S]~ # A no-op, because the ~ is at the end of the word, not the start.

Спробуйте в Інтернеті!


8

Сітківка , 53 байти

Кількість байтів передбачає кодування ISO 8859-1.

$
¶$`
O$^`\G.
»
D`
M$`^.+$
$+.^`$M
`D
»
.G\`^$O
`$¶
$

Спробуйте в Інтернеті!

Я майже впевнений, що це ще не оптимально ( »лінія здається особливо марною, і у мене є 45-байтне рішення, яке є паліндромним, за винятком одного символу), але я думаю, що це початок.


8

GNU sed , 64 59 + 1 (r прапор) = 60 байт UTF-8

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

:;s:^(.)(.*)\1$:\2:;t;/../c1
d
1c/../;t;:2\:$1\)*.().(^:s;:

Сценарій друкується, 1якщо рядок вводу не є паліндром (вважайте це помилкою). Якщо рядок є паліндром, то вихід не дається (подумайте про те, що він успішно виходить).

Наведіть приклади: або спробуйте в Інтернеті!

me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "level"
me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "game"
1

Пояснення:

:                              # start loop
s:^(.)(.*)\1$:\2:              # delete first and last char, if they are the same
t                              # repeat if 's' was successful
/../c1                         # if at least 2 chars are left, print 1. 'c' reads
                               #till EOL, so next command must be on a new line.
d                              # delete pattern space. This line must be a
                               #palindrome itself, and must end the script.
1c/../;t;:2\:$1\)*.().(^:s;:   # (skipped) print first half of code in reverse
                               #order. Everything after 'c' is treated as string.

1
TIO вже має підтримку sed. -rне працює, але ви можете просто загорнути все в BASH. Спробуйте в Інтернеті!
Райлі

@Riley Приємне використання верхнього та нижнього колонтитулів у TIO, дякую. Попереднє рішення полягало в переміщенні коду до списку аргументів за допомогою -e, але ваш спосіб набагато приємніший. Я чекав, що це буде виправлено, але цього не потрібно.
seshoumara

7

Аліса , 19 байт

/@.nzRoi\
\ioRzn.@/

Спробуйте в Інтернеті!

Відбитки Jabberwockyдля паліндромів і нічого для непаліндром. Працює для довільного введення UTF-8.

Пояснення

Оскільки це завдання обробки рядків, для її вирішення Алісі доведеться працювати в звичайному режимі. Це в свою чергу означає, що вказівник інструкції повинен рухатися по діагоналі, і тому нам потрібно принаймні дві лінії, щоб IP може підстрибувати вгору і вниз. Лінія подачі в такій програмі робить гарне місце для розміщення середнього персонажа паліндром. Це означає, що другий рядок повинен бути зворотним для першого. Але оскільки ми виконуємо лише кожен інший символ у кожному рядку, якщо ми переконаємося, що довжина рядка непарна, реверс коду акуратно впишеться у власні прогалини. Єдиний символ, який взагалі не використовується, - це зворотний нахил, але оскільки він був довільним, я вибрав його, щоб програма виглядала приємно та симетрично.

Так що в будь-якому випадку, фактичний відповідний код такий:

/ . z o
 i R n @

Який виконується в зигзазі зліва направо.

/   Reflect the IP southeast, enter Ordinal mode.
i   Read all input as a single string.
.   Duplicate the input.
R   Reverse the copy.
z   Pop the reverse Y and the original X. If X contains Y, drop everything
    up to its first occurrence. Since we know that X and Y are the same length,
    Y can only be contained in X if X=Y, which means that X is a palindrome.
    So this will result in an empty string for palindromes and in the non-empty
    input for non-palindromes.
n   Logical NOT. Replaces non-empty strings with "", and empty strings with
    "Jabberwocky", the "default" truthy string.
o   Output the result.
@   Terminate the program.

6

Хаскелл , 34 байти

f=(==)=<<reverse--esrever<<=)==(=f

Спробуйте в Інтернеті! Дзвінок з f "some string", повернення Trueабо False.

=<<Оператор функцій працює , як f=<<g = \s -> f (g s) s, тому код еквівалентний f s=s==reverse s, який, як я тільки що помітив, призведе до того ж лічильнику байтів.


Версія без коментарів: (49 байт)

e x y=x/=y
p=e=<<reverse
esrever<<=e=p
y=/x=y x e

Спробуйте в Інтернеті!

Подзвоніть з p "some string". Це виводиться, Falseякщо даний рядок є паліндром, а Trueякщо це не паліндром.

Пояснення:

Я знайшов цей коментар безкоштовним паліндром, почавши з версії коментаря та замінивши коментар новим рядком:

p=(==)=<<reverse
esrever<<=)==(=p

Другий рядок виходить з ладу, оскільки дужки не збігаються, тому нам потрібно позбутися їх. Якби у нас була функція, eяка перевіряє рівність, значить

p=e=<<reverse
esrever<<=e=p

обидва компілювати з другої лінією , визначається інфіксне-оператор , <<=який приймає два аргументи esreverі eі повертає функцію p.

Визначити eяк функцію рівності, як правило, писати e=(==), але )==(=eзнову не компілювати. Замість того, щоб ми могли явно взяти два аргументи і передати їх ==: e x y=x==y. Тепер обернений код y==x=y x eкомпілюється, але переосмислює ==оператор, що призводить до того, що визначення e x y=x==yне вдається. Однак якщо ми переходимо до оператора нерівності /=, перетворене визначення стає y=/x=y x eта визначає =/оператора, який не заважає вихідному /=оператору.


5

МАСЛО , 178 байт

Читає вхід, вибухає його, повільно додає його довжину (через збільшення та зменшення) до адреси, щоб знати до адреси після рядка, переходить до іншої частини коду (посередині), перевертає напрямок смуги, імплодує рядок ще раз і перевіряє, чи є він таким же, як і початковий рядок. TL; DR: Це біль, як завжди.

Виводиться, 40якщо рядок не є паліндром, 0якщо він є.

5
0
12
0
40
1
40
2
1
40
34
10
2
3
22
16
9
2
8
35
6
11
6
37

3
4
4
27
26
0
1
10
1

40
13
2
31
04

1
01
1
0
62
72
4
4
3

73
6
11
6
53
8
2
9
61
22
3
2
01
43
04
1
2
04
1
04
0
21
0
5

2
Охайна мова! :)
DLosc

5

Javascript, 64 байти

f=s=>s==[...s].reverse().join``//``nioj.)(esrever.]s...[==s>=s=f

Функція виклику за fдопомогою рядка

f("abba") // returns true
f("abab") // returns false

Ваш вихідний код - не паліндром!
seshoumara

@seshoumara Оновлено код
Прасант Бендра

Зараз це добре. Можливо, згадайте повернене значення, якщо рядок не є паліндром, просто для завершення.
seshoumara

@apsillers дякую, що я відредагував відповідь.
Прасант Бендра

Немає функції f, ваш код не призначає вашу функцію стрілки змінній, тому її не можна викликати
spex

5

Japt , 7 2 байти

êê

Виконати його

Старе рішення:

U¥UwU¥U

Спробуйте в Інтернеті!

Пояснення

U¥UwU¥U
U¥        U is the input, ¥ is a shortcut for == 
  Uw      w is a reverse function.
    U¥U   This calculates U == U (always true), but the result is ignored
          because w does not look at its arguments.

Japt не уникає функцій, якщо не буде досягнуто дужки (або пробілу, що закривається).

Це можна переписати: U¥Uw(U¥U)U¥UwU==Uw. У Japt дужки, що залишилися на початку та в кінці функції, автоматично вставляються.


Все має сенс, за винятком випадків, коли wфункція, яка не бере аргументів, як це застосовується U? Це щось на кшталт U.reverse()?
DLosc

@DLosc Правильно. Він обертається Uтак само, як і U.reverse().
Олівер

4

Утиліти Bash + Unix, 49 байт

[ "$1" = "`rev<<<$1`" ] # ] "`1$<<<ver`" = "1$" [

Введення передається як аргумент.

Вихідний результат повертається в коді результату - 0 для паліндром, 1 - для непаліндром.

Можливо, хтось може зробити краще, а не просто покладатися на коментар, щоб зробити сам код паліндромним.

Спробуйте в Інтернеті!


[[ $1 = `rev<<<$1` ]]коротше. ( [[Синтаксис Баша , цитата не потрібна)
Arthur2e5

2
@ Arthur2e5 Я випробував вашу пропозицію, але я думаю, що цитати rev<<<$1потрібні навіть у [[...]]рішенні. Перевірте його за допомогою вхідного рядка '[$]]$['(який є паліндром). З цитатами, що додаються, щоб вона працювала, ваше рішення має таку ж довжину, як і моє рішення.
Мітчелл Спектор

Чудовий улов! Я забув, що RHS ==в Інтернеті [[трактуватиметься як case-подібна модель.
Arthur2e5

@ Arthur2e5 Я все ще думаю, що, мабуть, є якийсь розумний спосіб зробити це коротше.
Мітчелл Спектор

Чи все-таки це буде працювати, якщо у введенні будуть нові рядки? Я думаю, що вам потрібен rev | tac, а не просто rev.
b_jonas

4

> <>, 11 байт

{=?!;
;!?={

Спробуйте тут!

Повертає "\ nщо щось пахне риб'ячим ..." на дійсному паліндромі, на неправильному паліндромі немає виводу. Покладіть паліндром на стек.


Якщо вимога входу вже є у стеку, це робить фрагмент. Це завдання вимагає програм або функцій, а не фрагментів.
pppery

4

Java - 171 169 160 байт

int q(String s){return s.equals(new StringBuffer(s).reverse().toString())?1:2;}//};2:1?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

Коментар наприкінці - це зробити паліндром. Повертається, P(alindrome)коли вхід паліндром, а N(ot)коли ні.

Безгольова версія:

int q(String s) {
    return s.equals(new StringBuffer(s).reverse().toString()) ? 'P' : 'N';
}//};'N':'P'?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

2 байти збережено завдяки @DLosc

Дякуємо @Olivier Grégoire за вказівку на неправильну кількість байтів! Виправлено зараз


Я вважаю, що ви можете зберегти кілька байт, повернувши ints замість chars.
DLosc

Я не знаю, як перевірити кількість байтів, але у вас 160 байт, а не 161.
Олів'є Грегоар,

Ви можете зберегти 2 байти, повернувши 80 для 'P'і 78 для 'N'або використовувати різні символи, щоб зберегти ще більше байтів.
Селім

1
Ви можете зберегти ще більше байтів, new StringBuffer(s).reverse()+""замість цьогоnew StringBuffer(s).reverse().toString()
Селім

1
з якоїсь причини ви повертаєтесь intзамість bool?
CodesInChaos

4

Java 8, 92 90 байт

Це версія для коментарів. Якщо рядок містить зворотний бік, то це паліндром ( true), інакше це не ( false).

s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s

Спробуйте в Інтернеті!

Оновлення

  • -2 [18-04-05] Переключено на вміст. Дякуємо @Kevin Cruijssen !
  • -2 [17-02-20] Вилучені ;«и
  • -16 [17-02-22] Автоматичне перетворення

Цей код не є лямбда-виразом.
Якоб

@Jakob Я думав, що це так. Якби ви використовували лямбда, ви, ймовірно, хотіли б провідний і зворотний новий рядок. (Я додав посилання на tio)
NonlinearFruit

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

@Jakob Рішення Lambda іноді можуть мати сторонній код , тому я вважаю, що це справедливо. Але якщо вас не продають, метапост не зашкодить.
нелінійний

1
Я знаю, що минув час, але ви можете пограти в 2 байти, змінивши його на s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s. Спробуйте в Інтернеті 90 байт .
Кевін Крейссен

3

Власне , 5 байт

;R=R;

Спробуйте в Інтернеті!

Поточний результат є [1]\n[1], а фальсифікований вихід []\n[](в обох результатах \nпредставляє буквальний новий рядок).

Пояснення:

;R=R;
;R=    duplicate input, reverse one copy, test equality (the main palindrome-testing part)
   R   range(1, x+1) - if palindrome, this pushes [1], else it pushes []
    ;  duplicate

Чому ти просто не робиш цього ?
Leaky Nun

1
@LeakyNun це має бути паліндром
caird coinheringaahing

3

C ++, 154 байт

int m(){std::string g,p="";g=p;std::reverse(p.begin(),p.end());return g==p;}//};p==g nruter;))(dne.p,)(nigeb.p(esrever::dts;p=g;""=p,g gnirts::dts{)(m tni

Треба сказати, зворотне твердження було дорогим, але я не можу уявити, що я багато можу зробити, щоб змінити це. Можливість вирізати символи std :: дозволить заощадити близько 10 символів, але "використовуючи простір імен std;" є ще декілька.

Я думаю, що C ++ насправді не був призначений для стислості.


3

Пролог, 44 байти

p-->[]|[_]|[E],p,[E].%.]E[,p,]E[|]_[|][>--p

Тут використовуються певні граматики пункту. Насправді це граматика з повним контекстом:

p -->
      []            % the empty string
   |                % or
      [_]           % a one character string
   |                % or
      [E],          % one character, followed by
      p,            % a palindrome, followed by
      [E].          % that same character

Використання:

?- phrase(p,"reliefpfeiler").
true 

?- phrase(p,"re").
false.

2

CJam, 13 байт

l_W%=e#e=%W_l

Пояснення:

l_W%=e#e=%W_l
l_            e#Read input twice
  W%          e#Reverse one input
    =         e#Test for equality
     e#e=%W_l e#Comment to be a palindrome

Приклад:

> l_W%=e#e=%W_l
l_W%=e#e=%W_l
1

> l_W%=e#e=%W_l
Hi
0

> l_W%=e#e=%W_l
hh
1

Спробуйте це:l_W%#e#%W_l
aditsu

2

J, 15 байт, 15 символів

-:|.NB. .BN.|:-

Повертає 1, якщо паліндром, 0 якщо ні.

Вихід:

   f '())('
1
   f 'nope'
0

Пояснення:

-:    NB. "Match" verb, checks for equality
|.    NB. Reverses the string
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.