Палиндром - это слово, обратное ему.
Теперь есть некоторые слова, которые могут выглядеть как палиндромы, но это не так. Например, рассмотрим слово sheesh
, sheesh
не являющееся палиндромом, потому что его противоположность - hseehs
это другое, однако, если мы рассмотрим sh
одну букву, то наоборот sheesh
. Такое слово мы будем называть полупалиндром.
В частности, слово является полупалиндромом, если мы можем разделить его на некоторое количество фрагментов, чтобы при изменении порядка фрагментов формировалось исходное слово. (Для sheesh
этих чанков есть sh e e sh
) Мы также не будем требовать, чтобы чанк содержал буквы из обеих половин слова (иначе каждое слово было бы полупалиндромом). Например rear
, не является полупалиндромом, потому что r ea r
имеет chunk ( ea
), который содержит буквы с обеих сторон исходного слова. Мы считаем, что центральный символ в слове нечетной длины находится с обеих сторон слова, поэтому для слов с нечетной длиной центральный символ всегда должен быть в своем собственном фрагменте.
Ваша задача будет взять список положительных целых чисел и определить, являются ли они полупалиндромом. Ваш код должен вывести два непротиворечивых неравных значения: одно, если входной сигнал является полупалиндромом, а другое - иначе. Однако последовательность байтов вашего кода должна быть полупалиндромом .
Ответы будут оцениваться в байтах, причем меньшее количество байтов будет лучше.
Тест-кейсы
[] -> True
[1] -> True
[2,1,2] -> True
[3,4,2,2,3,4] -> True
[3,5,1,3,5] -> True
[1,2,3,1] -> False
[1,2,3,3,4,1] -> False
[11,44,1,1] -> False
[1,3,2,4,1,2,3] -> False
Программа для генерации большего количества тестов.
Борьори указал, что они похожи на обобщенные палиндромы смарандаш . Так что, если вы хотите продолжить чтение, начните с одного.
источник
Ответы:
Retina 0.8.2 ,
8569 байтПопробуйте онлайн! Объяснение:
Выбирает режим матча. Фактически, Retina по умолчанию работает в режиме Match для однострочной программы, но вторая копия кода всегда будет соответствовать, если бы не эти дополнительные символы.
Матч должен начинаться с начала.
Захватите несколько серий персонажей. Каждый прогон должен заканчиваться запятой.
При желании сопоставьте ряд цифр и запятую.
При желании сопоставьте все снимки в обратном порядке, отображая каждый из них по мере их совпадения.
Матч должен заканчиваться в конце.
Возврат, если не все захваты были сняты. Это работает, требуя, чтобы совпадение все еще было в начале строки, если у нас есть неоткрытый захват, что невозможно.
источник
Желе ,
2723 байтаВозвращает 1 для полупалиндромов, 0 в противном случае.
Попробуйте онлайн!
Как это работает
источник
Python 2 ,
157153147143 байта-4 байта благодаря тш .
Попробуйте онлайн!
источник
x==x[::-1]
чтобыlen(x)<2
сохранить 2 * 2 байта; 143 байт05AB1E ,
59474341 байт-12 байт благодаря @Emigna .
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
2ä
øøε.œ} `, экономя 6 байтов. Вы также, кажется, оставили 30 неиспользованных байтов в ...€
вместоε }
. :)05AB1E , 37 байт
Использует примерно ту же технику, что придумал Джонатан .
Попробуйте онлайн!
Полная программа. Получает список из STDIN, выводит 1 или 0 в STDOUT.
Фильтр-оставь разделы, которые удовлетворяют ...
Это условие: длины каждого (
€g
) сохраняются в списке, чьи префиксы (η
) затем суммируются (O
), что дает нам кумулятивные суммы списка длин. Затем в стек помещается запрограммированная половина максимума этого списка, но при этом сохраняется и исходный список (Z;î
), и, если он встречается (å
) в кумулятивных суммах, функция возвращает истину.Для каждого из сравнения (
Q
) с вспять, которые выталкиваются отдельно в стеке . Возвращает список 0 с и 1 с.Â
Максимум. Если что-либо является правдивым, то 1 еще 0 . Конец казни. Все, что следует, полностью игнорируется.
источник
Python 2 ,
275251205 байт-24 байта благодаря @KevinCruijssen
-44 байта благодаря @PostLeftGhostHunter
Еще -2 байта благодаря @KevinCruijssen
Возвращает True для полупалиндрома, в противном случае - None
Попробуйте онлайн!
источник
Желе ,
3332 байта-1 Спасибо Erik the Outgolfer.
Благодарю также Денниса за исправление ошибки и за изменение деталей реализации в Jelly.
Полупалиндромы дают
1
, другие дают0
.Или посмотрите набор тестов .
Единственные фрагменты - это
ŒḂ
s ({3- й и 4- й } против {29- го и 30- го } байтов), просто для того, чтобы код мог анализировать.Как?
Все работы выполняются с правой стороны - «Main Link»:
источник
Perl 6 ,
8779 байт-8 байт с некоторыми хитростями из ответа Джо Кинга
Попробуйте онлайн!
Порт ответа от tsh на JavaScript. Возвращает два разных объекта Regex.
источник
Рубин , 129 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 139 байт
Попробуйте онлайн!
источник
C (gcc) (X86), 216 байт
Попробуйте онлайн!
p(L,a,n)
возвращает 0, если массивa
длиныL
является полупалиндромом, 1 в противном случае. Учитывая, что все префиксы длины>n
уже проверены, он сравнивает префикс длиныn
с суффиксом длиныn
.p(L,a)
это точка входа.К сожалению, более интересное решение длиннее:
224 байта
Попробуйте онлайн!
Ungolfed:
источник
Japt , 66 байт
Japt Переводчик
Большое улучшение в этой версии, теперь она превосходит большинство практических языков. Теперь работает с массивом целых чисел, так как в предыдущем методе была ошибка.
Объяснение:
источник
PHP 237 байт
рекурсивная функция, возвращает
true
(для входных данных, содержащих менее двух элементов) или1
для истинных,0
для ложных. Попробуйте онлайн (содержит разбивку).Фактическая длина кода составляет 118 байтов; полупалиндром, созданный путем дублирования кода.
Для лучшей производительности замените
&
на&&
и вставьте!$x&&
перед++$i
.источник
Scala, 252 байта
Попробуйте онлайн!
PS. По-видимому, решение в 2 раза длиннее, чтобы удовлетворить требование, что исходный код также является полупалиндромом.
PPS. Не кандидат в гольф-код, а чисто функциональное решение с использованием сопоставления с образцом:
источник
Perl 6 , 81 байт
Попробуйте онлайн!
Возвращает регулярное выражение
/../
для True и регулярное выражение/^(.+)(.*)$0$/
для False. Работает аналогично ответу nwellnhof , но предварительно преобразует список в строку.источник