Строка символов повторяется, если она содержит две последовательные подстроки, которые эквивалентны.
Например, 2034384538452
повторяется, поскольку он содержит 3845
дважды, последовательно.
Поэтому ваша задача - решить, содержит ли строка повторяющуюся подстроку. Вы можете принять ввод как строку или массив символов.
Вы никогда не получите пустой ввод, и длина подстроки (если она существует) может быть 1 или больше.
Я использую 1
и 0
здесь в качестве моих истинных и ложных ценностей, но вы можете использовать разные значения, если они правдивы и ложны в вашем языке.
Примеры:
abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0
(Последний пример был сгенерирован из числа единиц между каждым нулем в последовательности Туэ-Морса)
Ответы:
Сетчатка , 6 байт
Попробуйте онлайн!
Положительное значение для правды; ноль для фальси.
Как это устроено
Возвращает количество совпадений регулярного выражения
/(.+)\1/g
.источник
Брахилог , 3 байта
Попробуйте онлайн!
источник
Желе ,
65 байтЭто полная программа. TIO не может обработать последний контрольный пример без его усечения.
Попробуйте онлайн! (последний контрольный пример урезан до 250 цифр)
Как это устроено
источник
Mathematica, 32 байта
источник
StringContainsQ[x__~~x__]
и!StringFreeQ[#,x__~~x__]&
оба короче.Java, 27 байт
В значительной степени дублирует ответ Retina , но Java никак не становится короче.
источник
05AB1E , 5 байтов
Попробуйте онлайн!
Выводит 1 как истинное значение и 0 как ложное значение
объяснение
источник
Python , 38 байт
Попробуйте онлайн!
Зевок, регулярное выражение Проверяет, содержит ли строка один или несколько символов,
.+
за которыми следует та же строка, которая была только что захвачена. Выходной объект поиска - Truthy, если есть хотя бы одно совпадение, что может быть проверено с помощьюbool
.Использование
compile
здесь экономит на написании лямбда:Python , 54 байта
Попробуйте онлайн!
Ищет подстроку, которая состоит из двух или более равных строк, объединенных, как проверено,
s in(s*2)[1:-1]
как в этом ответе . Подстроки генерируются рекурсивно, выбирая вырезать первый или последний символ. Это экспоненциально, поэтому время ожидания для большого контрольного примера истекло.Недостатки:
Первый не использует Python
in
для проверки подстрок и поэтому может быть адаптирован к другим языкам.источник
Pyth -
1098 байтВозвращает список всех повторяющихся подстрок (который, если их нет, является пустым списком, что ложно)
Попытайся
Объяснение:
источник
f}+TTQ.:
работает на 1 байт меньше: ссылкаЧеддер , 60 байт
Попробуйте онлайн!
источник
@.test(/(.+)\1/)
PHP , 32 байта
Попробуйте онлайн!
PHP , 38 байт
Попробуйте онлайн!
источник
Python 3 ,
7366 байт-7 байт благодаря @LeakyNun
Попробуйте онлайн!
источник
f=lambda s:s and(any(s[:i]*2 in s for i in range(1,len(s)))or f(s[1:]))
lambda s:any(2*s[j:i]in s for i in range(len(s))for j in range(i))
Perl 6 , 11 байт
Проверь это
Expanded:
источник
PHP, 32 байта
Беги как труба с
-F
. Извини, Йорг, я не заметил, что ты написал то же самое .версия без регулярных выражений,
8482 байтавыход с кодом возврата
0
для повторения, тайм-аут (и выход с ошибкой) для отсутствия. Беги как труба с-nr
.предполагает ввод ASCII для печати; заменить
~
сa&
любой ASCII.источник
JavaScript (ES6), 19 байт
источник
/(.+)\1/.test
?/(.+)\1/.test
себя как полное представление./(.+)\1/.test
не связан (не имеетthis
).f=/(.+)\1/.test;f('aa')
не сработает, например. Вам нужно будет/./.test.bind(/(.+)\1/)
::/(.+)\1/.test
Pyth, 15 байт
Попытайся!
источник
V , 6 байтов
Попробуйте онлайн!
Тестирование!
Программа выводит
0
для значений Falsey и положительное целое для положительных значений.(Обратите внимание, что была небольшая ошибка, поэтому мне пришлось набрать 1 байт. Теперь, после исправления, я смогу заменить
.«
на\x82
)объяснение
источник
Japt, 8
+ 1=98 байтПопробуйте онлайн . Выходы
null
для ложных данных и массив, содержащий все повторяющиеся строки для правдивых.объяснение
источник
è
чтобы вернуть количество совпадений и сбросить флаг.null
, что ложно.00
он выводит00
. Вы уверены, что это правда в Джапте?"00"
есть.-Q
флаг «prettyprints» выход , так что вы можете видеть , что это массив , содержащий одну строку.Чеддер, 16 байт
Это функция. Попробуйте онлайн!
источник