Это зеркало |
. Я только что узнал, что вы можете прикрепить зеркало в середине строки, если строка может быть отражена на себя! Например, строка abccba
. Если разрезать его пополам, две половинки являются зеркальным отображением друг друга:
abc <--> cba
Таким образом, мы можем вставить зеркало в середине строки, и наша новая строка будет abc|cba
. Иногда, только часть строки может быть отражена на себе. Например, строка «зеркало». Два r отражены, но остальная часть строки - нет. Это нормально, мы просто удалим части строки, которые не отражают друг друга, и получим следующую строку:
r|r
Некоторые строки могут быть отражены в нескольких местах. Например, «Hello World, xyzzyx». Мне нравится, когда в моем зеркале отражается много текста, поэтому вам нужно найти лучшее место, чтобы поставить мое зеркало. В этом случае вы должны вывести более длинную зеркальную строку и, как и в нашем последнем примере, удалить все остальное. Эта строка становится:
xyz|zyx
Некоторые строки выглядят так, как будто они могут быть отражены, но на самом деле не могут. Если строка нигде не отражается, вы ничего не должны выводить.
Соревнование:
Учитывая строку, содержащую только printable-ascii, найдите лучшее место для размещения моего зеркала. Другими словами,
Найдите наибольшую палиндромную подстроку четной длины, затем выведите ее с символом трубы '|' в середине этого.
Длина ввода будет 1-50 символов.
Вы можете предположить, что ввод не будет содержать зеркал |
или новых строк. Кроме того, все печатные символы ascii являются честной игрой. Если самая длинная зеркальная подстрока связана между двумя подстроками, вы можете выбрать, какую из них вывести. Например, для строки «abba ollo» вы должны вывести «ab | ba» или «ol | lo», но не имеет значения, какую вы выводите. Строки чувствительны к регистру, например, «ABba» не должен выводить «AB | ba», он должен выводить пустую строку.
Образец ввода-вывода:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Как обычно, это код-гольф, поэтому применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
источник
Ответы:
Pyth -
19171513 байтСпасибо @FryAmTheEggman за то, что сэкономили мне два байта.
ARRGH особый случай без ответа.Решил это!Тестовый пакет .
источник
:Q)
= Bignose05AB1E ,
191714 байтовКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Python 2,
10297 байтСкорее медленно и неэффективно ... Проверьте меньшие контрольные примеры на Ideone .
источник
JavaScript,
10099 байтили
источник
eval
?eval
чтобы избежатьreturn
for
не является выражением, так что , как правило , требуют фигурных скобок иreturn
Lua, 133 байта
Проверьте все тестовые случаи на Ideone.com .
источник
t==t:reverse()
для сохранения байта :)Сетчатка , 66 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!(Первая строка позволяет тестировать несколько тестовых случаев, разделенных переводом строки).
Хм, намного дольше, чем хотелось бы ...
источник
JavaScript (ES6), 91
Меньше гольфа
Тест
источник
Perl 5,
10510098 + 1 =10610199 байтЯ просто хотел попробовать рекурсивные регулярные выражения. Нужен
-p
вариант. Редактировать: Сохранено (вычеркнуто 4) 7 байтов благодаря @ msh210. (Отсутствующий байт вызван сохранением, которое было заменено последним сохранением @ msh210.)источник
@_=(@_,$1)
может бытьpush@_,$1
. (2) Опустить переводы строки и финал;
. (3) Я подозреваю , что есть более короткое условие сортировки можно использовать (если ничего другого , то , по крайней мере --- возможно --- заменить-
на<=>
)-
и это не сработало (вероятно, нужны скобки для приоритета, который побеждает экономию).y...c>>1
илиy...c/2
вместоlength>>1
. (Не проверено.)Python 2, 91 байт
Замените
\x7f
действительным символом DEL, который является ASCII 127 (кредит Деннису).Это следует стратегии, аналогичной ответу Денниса об использовании
max
и рекурсивном ветвлении, чтобы найти самый длинный интервал палиндрома. Но вместо этого он находит левую половину, проверяя, что соответствующая зеркальная правая половина идет сразу после нее с самодельным запуском с .Функция определяет, находится ли первый символ в зеркальной левой половине. Если нет, он просто отбрасывает его и возвращается к остатку. Если это так, он добавляется в стек
p
обращенных символов. Если строка когда-либо начинается со стека, строка зеркала генерируется и рассматривается как возможное самое длинное зеркало. Чтобы избежать|
в качестве вывода, рассматриваются только непустые стеки.источник
Желе , 17 байт
Попробуйте онлайн!
Сделано с помощью мистера Xcoder и DJMcMayhem в чате
Как это работает
источник
Haskell,
126111 байтовисточник
TSQL
227223 байтаЯ жестко закодировал длину до 99 байтов, это сохранило байты, но сделало их медленнее. Это все еще имеет достойную производительность, хотя.
Golfed:
Ungolfed:
скрипка
источник
Python 2, 149 байт
Попробуйте онлайн
Эта программа находит первую половину самой большой палиндромной подстроки четной длины и печатает эту строку, после которой следует символ «а»
|
, а затем строка в обратном порядке. Если подходящей строки нет,t
будет пустой строкой и'|'*(L(t)>0)
будет оцениваться в пустой строке.источник
Java 8,
294283232 байтаОбъяснение:
Попробуй это здесь.
источник