Задав строку в качестве аргумента, выведите длину самой длинной (-ых) непересекающейся повторной подстроки (-ов) или ноль, если такой строки нет.
Вы можете предположить, что входная строка не пуста.
Примеры
abcdefabc
: подстрока abc
повторяется в позициях 1 и 7, поэтому программа должна вывести 3
abcabcabcabcab
: abcabc
или bcabca
или cabcab
повторяются, поэтому программа должна вывести 6 . (подстрока abcabcabcab
также повторяется, но вхождения перекрываются, поэтому мы не принимаем это).
aaaaaaa
: aaa
повторяется, например, в позициях 1 и 4, поэтому программа должна вывести 3
abcda
: a
повторяется, поэтому программа должна вывести 1
xyz
: нет повторяющейся строки → 0
ababcabcabcabcab
: должен вернуться 6
Это код-гольф , поэтому побеждает меньше байтов.
code-golf
string
code-golf
code-golf
kolmogorov-complexity
primes
code-golf
kolmogorov-complexity
hexadecimal
code-golf
code-golf
string
code-golf
string
random
code-golf
array-manipulation
code-golf
ascii-art
kolmogorov-complexity
random
code-golf
array-manipulation
code-golf
stateful
code-golf
hello-world
code-golf
string
code-golf
interpreter
lisp
code-golf
restricted-source
quine
palindrome
code-golf
ascii-art
random
generation
challenge-writing
ascii-art
random
polyglot
maze
answer-chaining
string
cops-and-robbers
whitespace
code-golf
string
cops-and-robbers
whitespace
code-golf
number
sequence
code-golf
date
code-golf
ascii-art
decision-problem
code-golf
combinatorics
chemistry
code-golf
kolmogorov-complexity
source-layout
radiation-hardening
code-golf
ascii-art
path-finding
maze
code-golf
string
ascii-art
game
animation
code-golf
string
ascii-art
code-golf
ascii-art
kolmogorov-complexity
code-golf
restricted-source
new-years
Arnaud
источник
источник
Ответы:
брейкфак, 226 байт
отформатирован:
Ожидает ввод с или без завершающего символа новой строки и выводит результат в виде байтового значения .
Попробуйте онлайн.
Это проверяет каждый префикс, чтобы увидеть, встречается ли он позже в строке, затем отсекает первый символ и повторяет процесс, пока не останется больше символов.
Лента разделена на 3-ячеечные узлы,
c 0 f
где
c
- символ данной строки, иf
это флаг, который может быть либо единичным, либо отрицательным, либо нулевым. Ненулевые флаги помещаются между двумя сравниваемыми символами, а отрицательные зарезервированы для ячеек после конца текущего префикса и перед началом текущего суффикса (т. Е. Перед индексом текущего потенциального совпадения).Результат сохраняется слева от строки и обновляется всякий раз, когда найдено совпадение.
(Строка фактически обрабатывается в обратном порядке с
\x01
добавлением к ней.)источник
Желе , 12 байт
Попробуйте онлайн!
Как это работает
источник
œ-Q
действительно опрятно.Perl 6 , 36 байт
Попытайся
Expanded:
источник
Retina ,
353230 байтДовольно крутой вызов.
Попробуйте онлайн
Объяснение:
источник
M%`.
в качестве второго этапа.JavaScript (ES6),
796866 байтРедактировать: Сохранено
1113 байт благодаря @Arnauld.источник
Haskell , 79 байтов
Попробуйте онлайн!
источник
%
может накапливать несмежную подпоследовательность, давая ложные срабатывания, такие как 2 дляaa
inaxayaa
,a%d
неправильный, но также и ненужный. Что также означает, что вы можете использоватьmax
вместоmaximum
.a%d
чтобы""%d
исправить это.a
пусто.sum[1|(x,y)<-zip a c,x==y]
можно использовать вместоa!c
.Python 3 ,
7572 байтаПопробуйте онлайн!
источник
JavaScript, 120
источник
Шелуха , 11 байт
Попробуйте онлайн!
Примечание: шелуха новее, чем этот вызов.
объяснение
источник
Perl 5 с
-p
, 40 байтПопробуйте онлайн!
источник
Mathematica,
7565 байт10 байтов сохранено благодаря @JingHwan Мин .
Анонимная функция. Принимает строку в качестве ввода и возвращает число в качестве вывода.
источник
BlankNullSequence (___)
когдаOverlaps->All
есть.Max@StringLength@StringCases[#,a___~~___~~a___:>a,Overlaps->All]&
было бы просто отлично.StringReplace
: PPyth - 16 байт
Мне нужно сыграть в гольф, преобразовав все струны в длину и найдя максимум.
Тестовый пакет .
источник
Clojure, 112 байт
петли дважды над числами
0
доn - 1
(n
времени длины строки), каплиj
символов и расщепляет остаток в «начало» и «конец» часть. Создает набор всех подстрокe
длиныb
и использует его как функцию, чтобы проверить,b
найден ли оттуда. Возвращает длину,b
если найдено, и 0 в противном случае, возвращает максимум этих значений.Было бы интересно увидеть более короткую версию.
источник
Сетчатка , 24 байта
Попробуйте онлайн!
Разминка для меня, чтобы узнать новые функции Retina 1.
объяснение
Этап List, который возвращает все совпадения для регулярного выражения
(.*).*\1
, которые соответствуют любому шаблону формы "ABA", где A и B - две произвольные подстроки (возможно, пустые). Дополнительные параметры, заданные на этом этапеv
, учитывают перекрывающиеся совпадения и$
применяют подстановку к каждому совпадению перед его возвратом: подстановка указывается во второй строке и соответствует length (.
) первой группы захвата ( которая будет подстрокой "A" в предыдущем примере).Теперь у нас есть все длины повторяющихся подстрок, эта стадия просто сортирует их в числовом порядке, от самой короткой до самой длинной.
Наконец, этот этап grep (
G
) сохраняет только результат last (-1
), который является длиной самой длинной повторяющейся подстроки.источник
Javascript, 165 байт
Тестовые случаи
источник
ababcabcabcabcab
, но строкаcabcab
повторяется.