Это взято из этого вопроса (с разрешения конечно). Я процитирую:
Создайте функцию, которая принимает строку, и она должна возвращать true или false в зависимости от того, состоит ли ввод только из повторяющейся последовательности символов. Длина данной строки всегда больше 1, и последовательность символов должна иметь хотя бы одно повторение.
Некоторые примеры:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
В частности, проверка строки, состоящей строго из повторяющихся подстрок ( Update ), может вывести любое истинное или ложное представление, но без ошибок, пожалуйста. Строго алфавитно-цифровые строки. В противном случае стандартный код правил гольфа. Это Code Golf, поэтому выигрывает самый короткий ответ в байтах для каждого языка.
code-golf
decision-problem
ouflak
источник
источник
Ответы:
Брахилог ,
43 байтаПопробуйте онлайн!
объяснение
Программа печатает,
true.
если ограничения могут быть выполнены, иfalse.
если нет.источник
~j↙
или=Ṁc
работать, пока не заметил, что вы опубликовали это час назадġ=Ṁ
Ṁ
переменная ограничена списком из двух или более элементов)JavaScript (ES6), 22 байта
Возвращает логическое значение.
Попробуйте онлайн!
Без регулярного выражения
3329 байтВозвращает либо
null
(ложь), либо объект (правда).Попробуйте онлайн!
NB: Технически,s преобразуется в регулярное выражение для match () , поэтому приведенный выше заголовок является ложью.
источник
grep, 19
Тест
Выход:
источник
Japt , 6 байт
Сохранено один байт благодаря @Shaggy
Попробуйте онлайн!
источник
p<space>
с²
сохранить байт.Java,
2524 байта-1 байт благодаря Оливье Грегуару!
Скучный регулярный ответ
Попробуйте онлайн!
Это всего лишь один байт больше , чем питон ответ AAAAAЯ привязанной сейчас :)источник
$
какmatches
метод является точным совпадением, а не совпадением подстроки по умолчанию.matches
добавить свое собственное$
к регулярному выражению. Благодарность!Excel, 26 байт
Входы от А1, выходы в любую ячейку, которую вы положили эту формулу
источник
A
) и задали его в качестве ввода.A1
также «переменной», поскольку он содержит входное значение? :)R , 28 байт
Попробуйте онлайн!
Простая версия Regex. R (иногда) очень похож на Python, так что это похоже на ответ регулярного выражения Python 2 от TFeld, хотя и короче!
Вопрос (если кто-нибудь знает ответ)
Я все еще не понимаю, почему это работает, так как подстрока может быть любой длины и всегда будет работать, и все еще работает, когда я добавляю букву в начале допустимой строки, например «cABABABABAB». Если я лично читаю регулярное выражение, я вижу
(.+)
, что оно охватывает любую группу любой длины. И затем,\\1+$
который повторяет захваченную группу любое количество раз до конца.Так почему же он не захватывает только «AB» и не находит, что оно повторяется до конца строки, тем более, что не указано никаких ограничений относительно того, где может начинаться подстрока?
источник
perl=TRUE
делает ее совпадающей с CABABAB, как и следовало ожидать. Запускgrep -E '(.*)\1+$'
в bash также соответствует cABABAB, хотя иgrep -E
использует ERE, предполагается, что тот же вариант регулярного выражения R должен поддерживать..+
в начале паттерна^.+
является важной оптимизацией, но если оно.+
находится внутри паренсов, оно перестает быть действительным.Сетчатка 0.8.2 , 9 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи.
источник
Желе ,
54 байтаТеперь я вижу, что оптимальный способ - следовать методу xnor !
Монадическая ссылка, которая принимает список символов и выводит целое число - минимально возможную длину повторяющегося фрагмента или ноль, если таковой не существует. Обратите внимание, что ноль - это ложь, в то время как ненулевые числа являются истинными в желе.
Попробуйте онлайн!
Как?
источник
Perl 5
-p
, 14 байтПопробуйте онлайн!
источник
Python 2 , 24 байта
Попробуйте онлайн!
Бесстыдно украденный у Хнора ответ на оригинальный вопрос.
Более интуитивная версия:
Python 2 ,
595553 байтаПопробуйте онлайн!
Скучная версия регулярного выражения:
Python 2 , 44 байта
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
2423 байтаПопробуйте онлайн!
источник
Пайк , 4 байта
Попробуй это здесь!
источник
J ,
26 25 1514 байтИспользование метода xnor
Попробуйте онлайн!
оригинал (два разных подхода)
J , 25 байт
Попробуйте онлайн!
J , 26 байт
Попробуйте онлайн!
источник
PowerShell,
2324 байта+1 байт, чтобы полностью соответствовать правилам
Попробуйте онлайн!
Довольно скучный. На основании других ответов Regex. К счастью, PowerShell не используется
\
в качестве экранирующего символа!источник
true
наaabcabc
C # (интерактивный компилятор Visual C #) , 70 байт
Бесстыдная адаптация xnor ( 46 байт )
Мое решение не Regex:
Объяснение:
Замените каждую возможную подстроку, которая начинается с индекса 0, пустой строкой. Если результатом является пустая строка, строка полностью состоит из этой подстроки. Поскольку это включает в себя оценку всей строки с самим собой, количество ожидаемых результатов должно быть больше 1.
Пример: abcabc
Возможные подстроки, начинающиеся с индекса 0:
Если мы заменим их пустыми строками
Поскольку существует подстрока, отличная от 'abcabc', которая возвращает пустую строку, строка полностью состоит из другой подстроки ('abc')
Попробуйте онлайн!
источник
Python 3 ,
62605654 байта-4 байта спасибо ArBo
Попробуйте онлайн!
источник
f=
Может быть отброшено; анонимные функции обычно разрешены. Кроме того, переключившись на Python 2 и проверив членство в списке вместоany
конструкции, вы можете получить 55 байтовJapt , 10 байт
Возвращает положительное число, если правда, и 0, если ложь. Если вы хотите вывод bool, просто добавьте
-¡
флагПопробуйте онлайн!
источник
Шелуха , 6 байт
Попробуйте онлайн!
Я чувствую, что это на один байт более чем оптимально, но я не смог найти механизм, который сделал бы явную композицию
ȯ
ненужной.объяснение
источник
€htD¹
избегаетȯ
.λ€htD¹
но я не понимал, что лямбды будут добавлены неявноMathematica 11.x, 74 байта
где, повсюду,
#
представляет входную строку, инаходит подстроки входной строки, соответствующие шаблону
Этот шаблон требует совпадений,
x
должен начинаться с начала строки и должен удовлетворять условию, что (1) совпадение не является всей входной строкой и (2) если мы заменим вхождения совпадения во входной строке пустой строкой мы получаем пустую строку. Наконец, сравнивая список совпадений с пустым списком,является
True
ли список совпадений не пусто , иFalse
если список матчей пуст.Тестовые случаи:
а также
источник
Python 3, 84 байта
Использует
textwrap.wrap
(благодаря этому ответу ) разделить строку на куски длиныn
чтобы проверить каждую возможную длину повторяющейся подстроки. Разделенные части затем сравниваются друг с другом, добавляя их в набор. Если все части равны, и набор имеет длину 1, то строка должна быть повторяющейся строкой. Я использовал<2
вместо того,==1
потому что он сохраняет байт, и длина входной строки гарантированно будет больше нуля.Если нет,
n
для которого повторяющиеся подстроки длиныn
составляют всю строку, тогда верните false для всей функции.источник
05AB1E , 5 байтов
Метод xnor из предыдущего вопроса также представляется оптимальным в 05AB1E.
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Чисто , 73 байта
Не использует регулярные выражения.
Попробуйте онлайн!
Определяет
$ :: [Char] -> Bool
.Проверяет, является ли данная строка префиксом повторения любой подстроки, взятой с конца.
источник
C ++ (gcc) , 36 байт
Попробуйте онлайн!
Еще один порт решения Xnor. Использует макрос для расширения аргумента в выражении. Предполагается, что аргумент имеет тип
std::string
.источник
Переменная QlikView, 27 байт
Это должно быть определено как переменная, которая затем позволяет вам передавать параметры, например,
$1
как ваше входное значение.Возвращает
0
или-1
(эквивалентноTRUE()
функции QlikView ).источник
Свифт, 196 байт
Попробуйте онлайн!
источник
Значок , 46 байт
Попробуйте онлайн!
Еще один порт решения Xnor.
источник
K (ок) , 29 байт
Попробуйте онлайн!
источник
Красный , 72 байта
Попробуйте онлайн!
Возвращает
1
заTrue
источник
T-SQL, 47 байт
Используя метод @ Xnor :
Сохраняя старый ответ, так как он содержит некоторые хорошие игры в гольф (67 байт):
Объяснение: Этот сценарий повторяет попытку замены ввода «@y» первыми символами «@» ввода «@y» на пустые значения, увеличивая при этом «@».
В конце концов, результат будет пустым. Если это происходит, когда переменная цикла равна длине varchar, критерий равен false / 0, потому что '@' = len (@y) (повторяющегося varchar не было).
можно сыграть в эту игру
потому что длина '@y' не может быть 0, а '@' никогда не будет превышать длину @y.
Попробуйте онлайн
источник