Самый короткий код, который находит все уникальные «подпалиндромы» строки, то есть: любую подстроку длиной> 1, которая является палиндромом.
eg.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
eg.2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
источник
источник
333
быть результат? Наивно вы в конечном итоге напечатаете33
дваждыОтветы:
J 24
3140Образец использования:
Возьми это, GolfScript!
источник
/dev/random
отсюда, чтобы обмануть нас ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 символа)?Питон 124
источник
Haskell 98, 88
9196источник
Питон -
138136Этот код не дублирует подпалиндромы.
источник
'"'+t+'"'
на,t
чтобы сэкономить место, хотя он использует одинарные кавычки.Рубин -
126 10297 знаковисточник
Golfscript, 48 символов
subpalindrome.gs
Использование:
Первая операция
{,}{(;}/
превращает строку в список конечных подстрок. Аналогичное преобразование ведущих подстрок затем отображается на результат. Затем сгладьте с помощью{+}*
, отфильтруйте палиндромы, используя предикат.,1>\.-1%=*
, возьмите уникальные значения с помощью.&
, затем хорошенько напечатайте.Было бы удобнее извлечь преобразование конечных подстрок в виде блока и использовать его в качестве замены ведущих подстрок после обращения каждой конечной подстроки, но я не могу найти краткий способ сделать это.
источник
Хаскелл -
170, 153источник
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
наmain=getLine>>=putStrLn.intercalate", ".toList.p
. Я также заменил бы вызовp
своим телом.subsequences
! Ваша программа сообщает о большем количестве субпалиндромов, чем эталонный выход для примера 1. (например, «1111»)J, 48
например
источник
Пролог, 92
Образец использования:
источник
Windows PowerShell, 104
109111Это ожидает ввода в stdin и выбрасывает все найденные палиндромы по одному на строку в stdout:
(Когда запускается из
cmd
него становитсяecho 12131331|powershell -file subp.ps1
- это просто$input
имеет немного другое значение в зависимости от того, как был вызван скрипт, но это может быть стандартным, но не в интерактивном режиме.)2011-01-30 13:57 (111) - Первая попытка.
2011-01-30 13:59 (109) - Объявление встроенных переменных.
2011-06-02 13:18 (104) - Переделайте поиск подстроки, присоединив массив char вместо вызова
.Substring()
и добавив немного больше.источник
Q, 78
использование
источник
Сетчатка ,
3427 байтПопробуйте онлайн!
Набор тестов нуждается в,
M
потому что он сопровождается другим этапом для вставки пустых строк между тестовыми примерами.объяснение
Print (
!
) все уникальное (@
), перекрывающиеся (&
) совпадения с регулярным выражением(.)+.?(?<-1>\1)+(?(1)^)
. Это соответствует палиндрому длины 2 или более с использованием балансировочных групп. Есть предостережение в части «все перекрывающиеся совпадения»: мы можем получить не более одного совпадения на стартовую позицию. Однако, если два палиндрома различной длины начинаются в одном и том же положении, более короткий палиндром снова появится в конце более длинного палиндрома. А поскольку жадность+
приоритетов больше совпадает, мы все равно получаем все палиндромы.источник
05AB1E ,
1110 байтПопробуйте онлайн!
источник
1›
на≠
. :)Perl 112
источник
JavaScript (ES6), 120 байт
Эта функция принимает строку в качестве входных данных и выводит массив.
источник
Clojure, 81 байт
for
это было идеальное совпадение :) Можно использовать,:when(=(reverse p)p)
если input был список символов ИЛИ полная строка не считалась палиндромом, на самом деле в этом случае максимальный диапазон такжеi
мог бы быть(count %)
.Самый компактный чехол для справки:
источник
Python, 83
102символаФраза
(t[1:]or())and...
эквивалентна(...)if t[1:]else()
и сохраняет один символ! Я чрезмерно горжусь этим, учитывая экономию.Пример:
источник
Scala 127
Чтобы сравнить это с яблоками и яблоками с другим ответом Scala, я также сделал свой объект, расширяющий приложение. Вместо того, чтобы итерировать входную строку вручную и использовать подстроку, я использовал скольжение (), чтобы создать для меня последовательность всех подстрок.
источник
Scala 156
170источник
Perl 6 ,
3532 байтаПопробуй это
Попробуй это
Expanded:
источник
Кокос , 69 байт
Попробуйте онлайн!
Python 2 , 73 байта
Попробуйте онлайн!
источник
Желе , 9 байт
Попробуйте онлайн!
источник
APL (Dyalog Classic) , 27 байтов
Попробуйте онлайн!
источник
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
действителен.Japt , 14 байт
Попробуйте онлайн!
Объяснение:
источник
PowerShell , 99 байт
Попробуйте онлайн!
Менее гольф:
источник
Брахилог , 11 байт
Попробуйте онлайн!
(Заголовок в ссылке не работает во время публикации, так что здесь предикат (эквивалентный функции в Brachylog) только в первом тестовом примере, с
w
концом для фактической печати вывода.)Я чувствую, что есть более короткий способ проверить, что длина больше 1. (Если бы это не отфильтровывало тривиальные палиндромы, это было бы просто
{s.↔}ᵘ
.)источник
APL (NARS), 65 символов, 130 байтов
тест:
кто-то знает лучше, почему, и может объяснить это лучше, без всяких изменений ... Я не настолько уверен в этом коде, возможно, если тестовые примеры будут более многочисленными, что-то пойдет не так ...
источник
Japt , 9 байт
Попытайся
источник
Java 8,
202201199 байтПопробуй это здесь.
Если функция не разрешена и требуется полная программа, вместо нее будет
256255253 байта :Попробуй это здесь.
Объяснение:
источник
JavaScript (ES6), 107 байт
Возвращает набор .
Контрольные примеры
Показать фрагмент кода
источник