Введение
Палиндромное замыкание входной строки - это самый короткий палиндром, который может быть построен из входной строки, где последний палиндром начинается с входной строки.
Для этой задачи мы рассмотрим двустороннее палиндромное закрытие, так что
- Левое палиндромное закрытие входной строки - самый короткий палиндром, который начинается с входной строки.
- Правое палиндромное закрытие входной строки - самый короткий палиндром, который заканчивается входной строкой.
- Двустороннее палиндромное замыкание входной строки является короче левого или правого палиндромного замыкания входной строки.
задача
Ваша задача проста. Если задана строка (состоящая только из печатного ASCII, новых строк и пробелов), выведите двустороннее палиндромное замыкание этой строки. В случае галстука допустимы выходные данные либо левого, либо правого палиндромного замыкания.
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции, и либо печатая результат в STDOUT (или ближайшую альтернативу), либо возвращая его в виде строки.
Вы можете предположить, что ввод никогда не будет пустой строкой.
Несколько примеров:
<Input> -> <Output>
"abcdef" -> "abcdefedcba" (or "fedcbabcdef")
"abcba" -> "abcba"
"abcb" -> "abcba"
"cbca" -> "acbca"
Начальная идея идёт в VisualMelon, последняя идея с помощью Мартина и Згарба
Термины палиндромное закрытие, лево-паллиндромное закрытие и право-палиндромное закрытие были впервые использованы и определены в этой статье .
источник
Ответы:
Пиф,
2219Попробуйте онлайн .
объяснение
Двустороннее палиндромное замыкание имеет либо форму,
AX
либоXA
, гдеX
является входной строкой иA
является подстрокойX
. На самом деле я должен быть непрерывной подстрокойX
, префиксом для одной формы, суффиксом для другой формы. Но мне плевать на эти ошибки. Подстрока (смежная или нет) - все, что мне нужно в Pyth.редактировать
Старая версия заказывала строки после фильтрации по длине
.olN...
. Только что понял, чтоy
возвращает подстроки, упорядоченные по длине. Так что эти палиндромы уже отсортированы.источник
Зажим , 40
пример
объяснение
источник
CJam, 30 байтов
Очень надеялся увидеть ответ CJam к настоящему времени.
Я действительно ненавижу это
{,}$
блок там, но я получаю неупорядоченный список возможных палиндромов из-за алгоритма генерации, который я использую.Объяснение кода
Попробуйте онлайн здесь
источник
{,}$
блок там тоже! Шучу, я понятия не имею, что делает CJam.Python 2,
11511310910596 байтМожно надеяться, что гольф дальше. Биты, возможно, заслуживают внимания:
источник
a
.Mathematica, 96 байт
Должен быть более элегантный способ, чем этот ...
Это определяет безымянную функцию, которая принимает строку и возвращает результат.
Основная идея заключается в
Characters
.Используйте сопоставление с образцом, чтобы найти правильный палиндромик каждого из них:
Обратите внимание, что это на самом деле не возвращает плоский список. Например,
{a,b,c}
вы получитеСортировать два результата по длине.
""<>#&@@
.источник
abacaba
когда входabac
. Правильный ответcabac
. Я думаю, что вы должны сгладить их, прежде чем сортировать по длине.Брахилог (2), 6 байт, языковые проблемы
Попробуйте онлайн!
Как обычно для Brachylog, это функция, а не полная программа.
объяснение
Насколько я знаю (это не мой язык, но кажется маловероятным),
a
он не был добавлен в Brachylog для этой задачи, но он очень удобен. Мы используем метод «обратный, и утверждаем, что он не изменился», чтобы утверждать, что найденное нами значение является палиндромом.Что касается того, почему это дает самый короткий палиндром, порядок оценки Пролога (и, следовательно, Брахилога) сильно зависит от того, что он оценивает первым. В данном случае это «обратная» команда, и (как и большинство операций со списками) она устанавливает порядок оценки, целью которого является минимизация размера результирующего списка. Так как это равняется размеру вывода, программа довольна тем, что случайно свела абсолютно правильные вещи, то есть мне не нужно было добавлять какие-либо явные подсказки.
источник
a
- Adfix не был добавлен для этого вызова. У меня не было доступного символа с хорошей мнемоникой для префикса и суффикса, поэтому я объединил оба в adfix, который может принимать индексы для выбора префиксов или суффиксов только при необходимости.Рубин, 76 + 2 = 78
С флагами командной строки
-pl
(l
может не понадобиться в зависимости от того, как вы делаете ввод), запуститеДля данной строки 'abaa' генерирует строки 'cbca 0 acbc' и 'acbc 0 cbca', где 0 - непечатаемый символ с кодом ascii 0. Затем удаляется одна копия самой длинной повторяющейся строки, обрамляющей 0 он находит в каждой, «a» в первом и «cbc» во втором, чтобы получить два замыкания. Затем выводится кратчайший результат.
Единственная действительно странная вещь в коде для игры в гольф состоит в том, что он сокращает строки на месте при сортировке, и с этим можно обойтись, потому
min_by
что блок выполняется только один раз для сравниваемого элемента (как потому, что это преобразование Шварца, так и потому, что существует только два элементы для сравнения).источник
Python 3, 107 байт
Тестировать:
источник
Haskell, 107 байт
Тест:
источник
J,
6662 байтаДовольно просто. Два трюка, которые я использую:
Правое палиндромное закрытие - это левое палиндромное закрытие перевернутой струны.
Нахождение длины строки с минимальной длиной и палиндромом с помощью выражения min (is_palindrome / length).
Попробуйте это онлайн здесь.
источник