Получив строку s
, верните наименьшую непрерывную подстроку, которую вы можете удалить, чтобы создать палиндром.
Примеры:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Предложения тестовых примеров от пользователей (если вы обнаружите, что крайний случай не указан, пожалуйста, оставьте комментарий):
aabaab -> b | Suggested by Zgarb, some returned "aa".
правила
- На входе будут отображаться только печатные символы ASCII (без перевода строки, будьте проще).
- Не совсем правило, но заметьте
<>
,/\
,()
,[]
и{}
не палиндромов.
Это код-гольф , выигрывает самый маленький счетчик байтов.
Аднан потребовал +100 к награде
code-golf
string
palindrome
Урна волшебного осьминога
источник
источник
aabaab
[[]]
палиндром?]][[
. Считайте, чтоaabb
это одно и то же, просто разные персонажи.Ответы:
Желе , 16 байт
Попробуйте онлайн!
Как это устроено
источник
J , 24 байта
Попробуйте онлайн!
объяснение
источник
(;"e f)&>
в качестве тестового глагола?Wolfram Language (Mathematica) ,
5351 байтПодсчет байтов предполагает кодирование CP-1252.
Попробуйте онлайн!
Определяет унарный оператор
±
(или функциюPlusMinus
). Ввод и вывод - это списки символов. Набор тестов выполняет преобразование из и в фактические строки для удобства.источник
Reverse
то , что сравнение реверс на оригинал короче PalindromeQ? Я не знаю Mathematica, так что понятия не имею.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
на два байта длиннее. Я не знаю, есть ли более короткая альтернатива.Желе , 20 байт
Попробуйте онлайн!
источник
05AB1E , 18 байт
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
ǝ
был серьезно гением, хотяPython 3 , 97 байт
Попробуйте онлайн!
источник
Python 2 , 116 байт
Попробуйте онлайн!
Спасли пару байтов с помощью Халварда Хаммеля !
источник
Japt ,
2622 байтаПроверьте это онлайн! Попытка выяснить, как сопоставить
false
что-то ложное и любую строку с чем-то правдивым в одном байте В настоящее время я использую+0
...источник
Баш , 108 байт
Принимает ввод в качестве аргумента командной строки.
Попробуйте онлайн! с кавычками, напечатанными вокруг выхода для просмотра начальных / конечных пробелов.
источник
Пролог , 271 байт
В какой-то момент я понял, что это будет огромным по стандартам code-golf, поэтому я оставил несколько лишних пробелов, чтобы сохранить сходство с неясной версией. Но я все еще думаю, что это может быть интересно, так как это другой подход к проблеме.
Не запутанная версия:
источник
C ++,
254248246 байт-6 байтов благодаря Захарию -2 байта благодаря Тоби Спейту
Так...
T
в качестве определения макроса, потому что он выполняетR""
еще один эффект для строкового литерала (это префикс, используемый для определения необработанных строковых литералов, см. Cppreference для получения дополнительной информации), которого нет, когда яT""
p(std::string)
проверить, является ли строка палиндромом. Если это так, он возвращает то,1
что приводит, вtrue
противном случае возвращает0
, который приводит кfalse
the last index - number of erased char
. Если он обнаруживает, что стирание какой-либо части является палиндромом, он возвращается. Например, при передаче строки в"aabcdbaa"
качестве параметра обаc
иd
являются допустимым ответом, но этот код вернется,c
потому что его удаление и проверка, если это палиндром, предшествуют проверке, если стирание,d
и тестирование, если это палиндром.Вот код для тестирования:
источник
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
быть опущен? Повторение по всей длине просто повторит тесты, которые мы сделали, что должно быть безвредным. Возможно, вы захотите расширить то, что вы подразумеваете под «другим эффектом»R""
(т. Е. Он анализируется как необработанный строковый литерал).Желе , 33 байта
Попробуйте онлайн!
источник
PHP 104 + 1 байт
Запустите как трубу с
-nR
или попробуйте онлайн .источник
Haskell ,
109105 байтПопробуйте онлайн!
РЕДАКТИРОВАТЬ: Спасибо @ H.PWiz за удаление 4 байта! Мне нужно поправиться с этими монадами!
источник
JavaScript, 90 байт
Попробуйте онлайн!
Показать фрагмент кода
источник
Perl 5, 72 +1 (-p) байтов
Попробуйте онлайн
источник
JavaScript (ES6),
9178 байтВвод и вывод - это списки символов.
Рекурсивно удаляет все больший и больший срез со входа, пока не будет найден палиндром.
Отрывок:
Показать фрагмент кода
источник
TSQL (2016) 349B
Не самое компактное, но простое решение:
источник
@
в качестве переменной для нескольких байтов. В CTE вы можете использоватьwhere''=value)
другой, и вам не нужно возвращатьC
результат.Шелуха , 18 байт
Попробуйте онлайн!
объяснение
источник
Haskell ,
98948180 байтПопробуйте онлайн! Пример использования:
""#0 $ "aabaab"
доходность"b"
.Редактировать: -1 байт благодаря Эрджану Йохансену.
источник
""
наt
.C ++,
189186176167 байтЯ начал с ответа HatsuPointerKun , изменив тест, чтобы просто сравнить равенство с перевернутой строкой; затем я изменил способ перечисления строк-кандидатов. После этого макросы использовались только один или два раза, и их было короче.
объяснение
Эквивалентный читаемый код:
Перечисление кандидатов начинается с инициализации строки с
w
пропущенными первыми символами, а затем копирования последовательных символов из оригинала для перемещения пробела. Например, со строкойfoobar
иw
== 2:Первый проход (с
w
== 0) является запретом, поэтому полная строка будет рассматриваться снова и снова. Это хорошо - игра в гольф превосходит эффективность! Последняя итерация этого цикла будет обращаться к индексу «один за другим»; Мне кажется, что это сходит с рук с GCC, но строго говоря, это неопределенное поведение.Тестовая программа
Прямой ответ от ответа ХацуПоинтерКуна :
источник
REXX, 132 байта
источник
Рубин ,
8684 байтаПопробуйте онлайн!
источник
z=s.size-l+1
.C (gcc) , 307 байтов
Попробуйте онлайн!
источник