Вдохновленный Это двойной разговор? Я разработал более сложную задачу. По заданной строке определите, является ли строка n-говорящей , для любого .
N-говорить определяется путем повторения каждой буквы раз. При строка преобразуется в . Ваша цель состоит в том, чтобы выяснить, является ли ввод действительным выходным сигналом для любого n-образного преобразования.Hello
HHHHeeeelllllllloooo
Следует отметить, что любое предложение, которое является действительным n-говорящим, для , также является действительным k-говорящим. Таким образом, сложные части будут иметь нечетные значения .
вход
Строка, состоящая как минимум из 2 символов. Ввод также может быть списком символов. Ввод чувствителен к регистру.
Выход
Truthy
если строка n-говорить, в falsey
противном случае.
Примеры
Истинные случаи
HHeelllloo,, wwoorrlldd!!
TTTrrriiipppllleee ssspppeeeaaakkk
QQQQuuuuaaaaddddrrrruuuupppplllleeee ssssppppeeeeaaaakkkk
7777777-------ssssssspppppppeeeeeeeaaaaaaakkkkkkk
999999999
aaaabb
aaaaaaaabbbbcc
aaaaabbbbb
@@@
Если вы хотите создать дополнительные правдивые случаи, вы можете использовать этот скрипт MathGolf . Поместите строку в кавычки и значение в качестве входных данных.
Ложные случаи
Hello, world!
TTTrrriiipppllleee speak
aaaaaaaaaaaaaaaab
Ddoouubbllee ssppeeaakk
aabbab
aaaabbb
a (does not need to be handled)
(empty string, does not need to be handled)
Конечно, так как это кодовый гольф, будьте готовы урезать некоторые байты!
aabbab
aaaabbb
Ответы:
APL (Dyalog Unicode) , 12 байт
Работает с
⎕io←0
Попробуйте онлайн!
Гольф вместе с Адамом .
На входе (пример:,
"aaccccaaaaaabb"
используется""
для обозначения строки (массива символов) и''
для обозначения символа)∊0⍞0
окружить нулями и сплющить,0 'a' 'a' 'c' 'c' 'c' 'c' 'a' 'a' 'a' 'a' 'a' 'a' 'b' 'b' 0
2≠/
выполнять попарно не равные,1 0 1 0 0 0 1 0 0 0 0 0 1 0 1
⍸
получить 0-индексированные индексы,0 2 6 12 14
∨/
вычислить GCD,2
1≠
это не равно 1?источник
Java 10, 85 байт
Regex перенесен из ответа @Arnauld 's JavaScript .
Попробуйте онлайн.
Объяснение:
Regex объяснение:
источник
Желе , 5 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 53 байта
Получено из регулярного выражения, используемого @wastl в " Это двойной разговор?" ,
Попробуйте онлайн!
Рекурсивная версия, 55 байт
Попробуйте онлайн!
комментарии
источник
05AB1E , 5 байтов
Попробуйте онлайн!
источник
Python 2 ,
73706967 байтПопробуйте онлайн!
-4 байта, благодаря Jitse
источник
set(...)
на{...}
...1 in[...
Python 3 , 69 байт
Попробуйте онлайн!
источник
QuadS , 16 байтов SBCS
Попробуйте онлайн!
1≠
1 отличается от∨/
GCD⍵
результата(.)\1*
PCRE Поиск любого символа, за которым следуют 0 или более повторений⊃⍵L
и возвращая первую из длин совпадения (то есть длину совпадения)источник
Stax , 5 байт
Запустите и отладьте его
Процедура:
источник
Запрос T-SQL 2008, 193 байта
Попробуйте онлайн
источник
PHP ,
7675 байтовПопробуйте онлайн!
Первая попытка, несколько наивный итеративный подход.
Ungolfed:
-1 байт , спасибо @ Night2!
источник
Perl 6 ,
302726 байтПопробуйте онлайн!
Также использует трюк GCD, но использует индекс конечной позиции каждого прогона, соответствующего регулярному выражению. Возвращает отрицательное число (truey), если n-говорить, ноль (falsey) в противном случае.
источник
Haskell , 48 байтов
Попробуйте онлайн!
Непосредственная; использует трюк GCD.
источник
Красный , 80 байт
Попробуйте онлайн!
Более идиоматичный красный :
Красный , 81 байт
Попробуйте онлайн!
источник
Брахилог , 5 байт
Попробуйте онлайн!
Принимает ввод через входную переменную и выводит через успех или неудачу.
Сначала я подумал, что это на самом деле будет короче, чем мое решение. Это двойной разговор? , но потом я понял, что
ġ
могу и попробую группу длиной 1.источник
Japt
-¡
, 8 байтПопытайся
источник
Котлин , 78 байт
Попробуйте онлайн!
объяснение
источник
Scala , 80 байт
Попробуйте онлайн!
PS. Оригинальное решение было основано на
split
функции, но оно длиннее (83 байта).источник
true
для вводаaab
, к сожалению.s.
заменил,(s+s).
чтобы справиться с этим.aaaabb
иaabbbb
.Wolfram Language (Mathematica) , 34 байта
Попробуйте онлайн!
источник
Perl 5
-p
,83797674 байтаПопробуйте онлайн!
источник
Brain-Flak , 96 байт
Попробуйте онлайн!
Использует тот же трюк GCD, который используют многие другие материалы. Выходное значение равно 0, если на входе нет n-говорить, и положительное целое в противном случае.
источник
Oracle SQL, 182 байта
Он работает с предположением, что входные данные хранятся в таблице t (x), например
источник
K (нгн / к) ,
2923 байтаПопробуйте онлайн!
edit: удалил некоторые ненужные двоеточия (я знаю, когда требуется монадическое, но мне не всегда ясно, есть ли неоднозначность, поэтому я по умолчанию
x-y*x%y
включаю двоеточие) и изменил мод на ngn / ky!x
, что означало, что я мог удалить присвоение переменнойисточник
APL (Dyalog Unicode) ,
2422 байта SBCSФункция анонимного молчаливого префикса.
Попробуйте онлайн!
⊂
приложите строку для обработки карты, используя всю строку,например
"aaabbb"
⍳∘≢{
…}¨
Для каждого из 1-⍳
х пунктов с помощью набора символов в строке:например,
3
⍺↑⍺
взять текущее количество элементов из текущего числа, добавив 0,например
[3,0,0]
(≢⍵)⍴
циклический г eshape в форму бирки символов в строке ,например ,
[3,0,0,3,0,0]
⍵/⍨
используйте это для репликации символов строки"aaabbb"
1↓
отбросить первый ( n = 1)⊂∊
Является ли вся строка членом этого списка?источник
[1,0,0,1,0,0…]
и т. Д. Я буду рад научить вас APL (обучение не займет много времени). Просто зайдите в сад APL .{1<∨/≢¨⍵⊆⍨≢∘∪¨,\⍵}
для 18{1<∨/≢¨⍵⊆⍨≢¨∪\⍵}
?aacccaaaaabb
Сетчатка 0.8.2 , 28 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Разделите текст на серии одинаковых символов.
Замените их всех одинаковыми символами.
Проверьте, больше ли GCD длин серий, чем 1.
источник
Japt
-mR
, 12 байтПопытайся
источник
MathGolf , 14 байтов
Попробуйте онлайн!
объяснение
Проверяет все возможные деления входной строки на куски равной длины и проверяет, есть ли раздел, в котором все куски имеют только один уникальный символ.
источник
Pyth , 7 байт
Выходы 0 для ложных входов или положительное целое число в противном случае.
Попробуйте онлайн!
источник
Pyth , 8 байт
Попробуйте онлайн!
источник
Perl 5
-n
, 38 байтПопробуйте онлайн!
print"\n"
В сноске необходимо отделить выходы.Простая петля через все возможные
n
с. Ничего не выводит для "1-говорящего", ничего для n-говорящего, где n> 1.источник