Палиндром некоторая строка , которая пишется точно так же , как назад и вперед. Например, «Ева, я могу заколоть летучих мышей в пещере?» такое палиндром (EVACANISTAB | BATSINACAVE)
Для этого кода гольф, используя язык по вашему выбору, определяет, является ли данная строка палиндромом или нет.
Краевые случаи:
- Пунктуация не засчитывается в палиндромность.
- Контрольные символы не засчитываются в палиндромность.
- Пробелы не засчитываются в палиндромность.
- Числа засчитываются в пользу палиндромности.
- Дело в этом вызове не засчитывается в палиндромность.
- Длина строк для оценки не ограничена, за исключением того, что навязывается выбранным вами языком.
- Для этого испытания ограничьте себя набором символов ASCII.
Технические требования:
- Нужны только тела метода; дополнительные вещи, такие как сигнатуры методов, объявления структур данных и т. д., не учитываются в требовании победы.
- Код должен компилироваться или интерпретироваться без ошибок или исключений во время компиляции.
- Код не должен выбрасывать необработанные исключения или сбои. (Почти не нужно говорить. Почти.)
- Код должен возвращать некоторое значение, указывающее на палиндромность. Тип данных зависит от используемого вами языка (например, пользователь C # может использовать a
bool
, тогда как пользователь JavaScript может использовать avar
.) - Вы не можете написать своего собственного переводчика, который выполняет эту задачу как «нативную» возможность, чтобы вы могли «сыграть в гольф» с почти выигрышным счетом. (Надеюсь, само собой разумеется.)
Условие победы:
- Самый короткий код в символах выигрывает.
Текущий лидер: tmartin (k, 25 символов)
... Хотите волшебную зеленую галочку своим ответом? Удар ответ этого парня!
code-golf
palindrome
decision-problem
Эндрю Грей
источник
источник
Ответы:
К, 25
,
источник
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, где 1 верно, а 2 ложноPerl, 26 символов
Значение
$_
равно 1, когда это палиндром,""
(одно из ложных значений Perl), когда это не так.Пример использования:
выход:
источник
_
в строке, не так ли? И это не требует никакого ввода, поэтому вам не нужно использовать эту-p
опцию?\W
в регулярных выражениях исключает подчеркивание. Боюсь, вам понадобится[^a-z\d]
регулярное выражение. Боюсь, меня все равно избили._|\W
вместо[_\W]
._|\W
до\Pl
: ideone.com/0ufdaQ . Должны быть только буквы Unicode.\Pl
не будет совпадать с цифрами, поэтому я думаю,_|\W
это лучшее, что вы могли бы сделать.Только C # 82 :)
Не смог устоять перед искушением написать бесплатную программу на моем любимом языке.
Тест доступен здесь: http://ideone.com/8bwz7z
источник
GolfScript,
36 34 3130 персонажейСхожий алгоритм с моим предыдущим (Javascript) решением .
0"0:A[a{"@{>^}+/
- Оптимизировано Питером Тейлором и Говардом. Моя версия была"/9@Z"{1$<},,2%\;
. Говард подарил функцию конкатенации, а Питер Тейлор подарил XOR для модуля-2. Это в основном общий метод сравнения, если значение находится в последовательности диапазонов.{.96>32*-}%
(11 символов) на самом деле не является улучшением по сравнению с Javascript.toUpperCase()
(14 символов), тем более что он искажает некоторые странные знаки препинания, которые следуютz
в таблице ASCII (что здесь не имеет значения).однако, как предположил Питер Тейлор, если мы сначала отфильтруем буквенно-цифровые символы, мы сможем преобразовать их в строчные буквы и цифры, просто установив один бит в каждом символе:
{32|}
.-1%=
выполняет все палиндромные тяжелые операции. Одна часть, которую я не очень люблю, это то, сколько времени мне потребовалось, чтобы узнать, как перевернуть массив. Я должен был прочитать документы. Два других символа выполняют управление стеком и сравнение.Тест: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Кроме того, если я могу предположить, что ни один из следующих управляющих символов не присутствует: (Выход канала данных, управление устройством 1-4, отрицательное подтверждение, синхронный режим ожидания, конец блока передачи, отмена, конец носителя) (мы все согласны, что это все довольно неясно) или если я могу рассматривать их как прописные версии цифр 0-9, мы можем сохранить еще два символа:
GolfScript, 28 символов
Тест: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
источник
{"0:A["\{>}+,,2%},
+
на блоках. Это крутой трюк.a{
в список символов фильтра, чтобы включить строчные буквы, но вы можете затем в верхнем регистре с просто{32|}%
. Конечный результат{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
же как и работа.Javascript, 53 символа:
является выражением javascript, которое оценивается как true, если
x
это палиндром, и как false, если это не так. Предполагается, чтоx
это строка. Если это не гарантировано, предварительноx+="",
Вот крошка: из-за того
reverse()
, как работает,выходит из строя. Тем не мение,
отлично в порядке.
источник
+""
приведение к строке,+
приведение к числу|0
и~~
приведение к целому числу,!!
приведение к логическому значению./[^\W_]/g
R: 66
Использование:
источник
Баш:
524846 символовЭто принимает строку для проверки в качестве первого параметра и устанавливает код выхода равным 0 для палиндрома и 1 для нет.
Образец прогона:
источник
Python 2: 49 (без учета сигнатуры метода)
Полная программа с вводом и выводом может быть записана в 74 символов.
Пример использования:
(
huge_palindrome.txt
содержит это 17 826 слов палиндром)Это решение может быть адаптировано для Python 3 с добавлением некоторых символов:
Питон 3: 55
источник
sys.stdin.read
в основном так же, какraw_input
s
переменную. Я решил предоставить полное определение, но, как это принято в 2013 году, в длину не включайте сигнатуру методаJAVA (или самый многословный язык)
1029695 символовИспользование (с негольфированным кодом):
Укороченный с помощью комментатора ниже
источник
if(s==null) return 1==0;
? Или Java навязывает инструкции дляif
операторов?null
хорошей привычкой, но не практикуется в CodeGolf. Как я могу сказать, никто больше не делал этого в этом вопросе. Пропустить это. 2) Пространство между аргументами помогает удобочитаемости, но не игре в гольф. Убери это; 3) Вместо явноtoLowerCase()
используйте строкуequalsIgnoreCase()
позже вместоequals()
. Таким образом, вы должны настроить регулярное выражение, но все еще на 1 символ короче. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
удалить_
тоже => 95 символовMathematica
5453Один байт сохранен благодаря CatsAreFluffy:
Для тех, у кого версия 10.2 или более ранняя:
пример
источник
PalindromeQ
на 1 байт короче#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 знаков
Использование:
источник
к (
50 48 4538 символов)Подавляет все ошибки, возвращая значение по умолчанию
0b
(false).Пример:
редактировать: побрил еще три символа, избегая промежуточной переменной. H / T, CS. -7: нет необходимости подавлять ошибки.
источник
Рубин:
4338 символовОбразец прогона:
источник
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
методов! Вы продолжаете удивлять меня @Howard своими хитростями.tr
и,tr!
кажется, ведет себя иначе, когда им нечего транслитерировать: pastebin.com/4YThW2qN Это приводитp['757']
к сбою теста с «NoMethodError: неопределенный метод` upcase! ' для nil: NilClass ».s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(Просчитались),100(неправильно) 81using namespace std;
.Использует,
int
потому что он корочеchar
илиauto
.источник
Луа, 56
источник
%W
есть что-то похожее\W
на регулярное выражение, оно также исключает символы, такие как подчеркивание. Это нежелательно.%w
не включает_
(%W
очевидно, включает его)s=s:lower():gsub('%W','')return s:reverse()==s
46 символовfunction(s)
Python 3/2 59 символов:
источник
Хаскелл, 43
Используя стандартные библиотеки
Control.Monad
,Control.Monad.Instances
иData.Char
:источник
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
и при этом не добавляя пробелы или что-то подобное, извините, я не слишком заинтересован в Haskell :)Control.Monad.Instances
тоже нужно . (Я использую экземпляр монады Reader сap
, но этот экземпляр не экспортируетсяControl.Monad
.)PHP 60 символов.
Сначала попробуйте на Codegolf.
Пример:
источник
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64 Персонажи:
источник
77
версию символов. Понятия не имею, почему Абхирам опубликовал версию без гольфа.re.findall('[a-z0-9]+',input.lower())
часть 3 символов короче.Haskell 48
используется так:
источник
Вкус Smalltalk , Squeak / Pharo
116 символов с использованием традиционного форматирования с вкладками
Вы добавляете два метода в строку:
Конечно, мы могли бы устранить некоторые пробелы или использовать более короткие имена методов, но давайте не будем предавать дух Smalltalk.
Более того, это будет обрабатывать французские палиндромы, как в http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais , не так много ответов на этой странице.
источник
Python 3 (51 символ)
и может быть Python 2
на основе решения Абхирам (с более агрессивным гольфом)
можно сократить до 46 символов, используя RE '\ w'
и вариант с чрезвычайно укороченным функциональным телом (27 символов)
источник
Windows PowerShell,
564745 символовОбновлен (см. Комментарии) и может убрать скобки вокруг регулярного выражения:
Оригинал (56)
Оригинал без игры в гольф:
источник
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 байта
Этот код действительно очень элегантен и прост для понимания (при правильном форматировании). Я не верю, что в C ++ можно стать короче, и он не использует никаких стандартных библиотечных функций.
Пример использования:
Красиво отформатированная версия:
источник
error: ISO C++ forbids declaration of ‘p’ with no type
ваша функция должна иметь тип возвращаемого значения.while(*++e);
вместоwhile(*e)++e;
. Но, как сказал Тит, этот ответ неверен.PHP,
26 84 80 78 6263 байтапринимает входные данные из первого аргумента командной строки; печатает
1
для правдивых, пустая строка для ложных.I18n немного расширяется, поскольку нет многобайтовой альтернативы для
strrev
(110 байт; работает с-r
):utf8_strrev явно украдено из руководства PHP . Вы также можете взглянуть на это сообщение в блоге .
источник
-R
вызовет проблемы с разрывами строк в строке, не так ли? Из спецификации "-R <code> Запустить PHP <code> для каждой строки ввода". Да еще<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
бы короче.$argn
без-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Руби, 48
Довольно просто и наспех сделано, чтобы не слишком много играть в гольф. Я буду играть в гольф позже.
источник
Pylongolf2 , 24 байта
c
принимает ввод,╨2
чтобы преобразовать в нижний регистр.Затем я помещаю регулярное выражение в стек и использую
-
для удаления все неалфавитные символы во входных данных._
дублирует ввод.╨1
переворачивает это и=
затем сравнивает их.~
печатает стопку в конце, которая печатаетtrue
илиfalse
.источник
PowerShell,
194190 байтРекурсивная реализация, показывающая, как неназванный блок сценариев PowerShell может вызывать сам себя.
ungolfed:
Тесты:
источник
[^a-z0-9]
?05AB1E , 4 байта (не конкурирующие)
Не конкурирует , так как язык задним числом. Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Желе, 10 персонажей (не конкурирует)
Возвращает 1, если истина, 0, если ложь
Попробуйте онлайн!
источник
fØBŒlŒḂ
:f
фильтр , чтобы сохранитьØB
множество [A-Za-Z0-9] иŒl
обращенного к нижнему регистру, тоŒḂ
испытание , если палиндром.