Дана строка s, состоящая из строчных букв, таких как
aabaaababbbbaaba
и положительное целое число п , такие , как 4
, выводить длина- п строка т таким образом, что , когда т повторяется до длины с , они имеют как много символов в часто , как это возможно. Для данного примера оптимальный результат будет aaba
, потому что у него тринадцать общих знаков с целевой строкой:
s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
^^^^^^^^ ^ ^^^^
и никакой возможности т больше. Тем не менее, для aaaaaab
, есть два возможных выхода: aaaa
и aaba
, каждый из которых имеет 6 общих символов с целевой строкой:
s: aaaaaab
t: aaaaaaaa (aaaa)
^^^^^^
s: aaaaaab
t: aabaaaba (aaba)
^^ ^^^^
Либо aaaa
или aaba
может быть выведен, либо оба, если хотите. Обратите внимание, что s никогда не повторяется; трейлинг a
в обоих повторяющихся значениях t просто игнорируется.
Контрольные примеры
Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba
правила
- Вы можете предположить, что входные данные будут только непустой строкой из строчных букв и положительным целым числом, не превышающим длину строки.
- Вы можете принимать входные данные в любом стандартном формате и в любом порядке.
- Вы можете вывести одну строку или несколько строк в виде массива, разделенных символами новой строки или пробелами и т. Д.
- Ваш код должен завершиться для каждого теста менее чем за 1 минуту на любом достаточно современном компьютере.
- Это код-гольф , поэтому сделайте ваш код как можно короче.
2 abb -> ba
где он построен как(b)[ab]a
: ведущий(b)
игнорируется,[ab]
совпадают.Ответы:
Желе , 11 байт
Попробуйте онлайн!
Не ожидал победить Денниса на этом, поэтому попытался FGITW (попробовав несколько вариантов; есть более одного способа сделать 11). Я пришел короче, к моему большому удивлению.
Принимает строку, а затем считать в качестве аргументов командной строки. Выходы на стандартный вывод.
объяснение
При этом используется понимание того, что буква в каждой позиции шаблона должна быть самой распространенной буквой, соответствующей этой позиции. Мы можем найти буквы, соответствующие определенному шаблону, разделив их на группы по размеру шаблона и транспонировав. Основная причина, по которой это решение настолько длинное, заключается в том, что у Jelly, похоже, нет короткого способа найти режим списка (я сделал несколько попыток, но все они имеют длину не менее шести байтов).
Желе , 10 байт, на основе решения @Dennis
Попробуйте онлайн!
Это комбинация решения @Dennis и моего; в этом решении был пятибайтовый режим, который я украл для этого решения. (У меня уже были решения, основанные на этом
⁸ċ
, но я не мог получить меньше шести байт; я не думал об их использованииÞ
.)объяснение
µ…µ€
иÇ€
(с…
предыдущей строкой) имеют длину в три байта (последняя нуждается в новой строке) и эквивалентны. Обычно я использую первое, но второе более гибкое, так как позволяет вам⁸
упомянуть аргумент.Это позволяет отсортировать (
Þ
) по количеству вхождений в⁸
(⁸ċ
), а затем взять последний элемент (Ṫ
), чтобы найти режим всего за пять символов.источник
Mathematica, 51 байт
Ввод и вывод - это списки символов.
Также на основе режимов линий транспонирования. Я считаю, что они вызвали встроенный режим списка
Commonest
только для того, чтобы наплевать на код игроков в гольф.источник
MostCommon
...Python 3,
99, 7361 байт-12, спасибо @Rod
Та же идея, но переписал ее, чтобы исключить оператор импорта.
оригинал
Объяснение:
источник
''.join()
чтобы получить список строк''.join(...)
заставит его вернуть генератор, не уверенный, что это разрешенный вывод.Python 2, 106
Теперь это другой ответ! Я думал об одном (почти) лайнере с самого начала. Теперь еще короче, основанный на использовании почтового индекса @Rod.
Спасибо @ L3viathan и @Rod за разъяснения по поводу использования лямбд в качестве ответа
Попробуйте онлайн
Объяснение:
combinations(S,N)
создает все комбинации длиной N из символов Smax()
есть аргумент,key
который принимает в качестве входной функции для сравнения элементовlambda s:sum(x==y for x,y in zip(S,s*len(S)))
передается как такая функцияЭта лямбда подсчитывает количество совпадающих символов в списке кортежей, производится
zip(S,s*len(S))
s
- одна из комбинаций, умноженная наlen(S)
которую создает строка, которая гарантированно длиннее Szip
создает наборы символов каждой строкиS
иs*len(S)
игнорирует все символы, которые не могут быть сопоставлены (в случае, если одна строка длиннее другой)Так
max
выбирает комбинацию, которая выдает максимальную суммуисточник
[]
для понимания списка внутри функции, также вы используете,1 for ... if <cond>
вы можете использовать напрямую,<cond> for ...
так как он будет использоватьсяsum
, Python будет приниматьTrue
как1
иFalse
как0
f=
(если оно не рекурсивно)JavaScript (ES6),
10410194 байтаСэкономили 3 байта дважды благодаря @Arnauld. 97-байтовое решение, которое работает со всеми не-символами новой строки:
Предыдущее 104-байтовое решение также работает с символами новой строки:
источник
o
новый объект, вы могли бы просто повторно использовать массив, переданныйmap
с использованием его третьего параметра?(n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')
следует сохранить еще 3 байта. (Или 4 байта, используя синтаксис карри.)Желе ,
1211 байтПопробуйте онлайн!
Как это работает
источник
Pyth, 11 байт
Принимает ввод как
s,n
и выводит как список символов.объяснение
источник
Japt ,
1615 байтСохранено 1 байт благодаря @obarakon
14 байтов кода + 1 байт для
-P
флага. Попробуйте онлайн!Неуправляемый и объяснение
источник
gJ
наo
Python 2 , 132 байта
Попробуйте онлайн!
источник
05AB1E , 17 байт
Попробуйте онлайн!
объяснение
источник
PHP, 245 байт
Онлайн версия
Сломать
источник
Haskell, 84 байта
Пример использования:
Разбить входную строку на куски длины
n
, транспонировать и найти для каждого подсписка наиболее часто встречающийся элемент.источник
Рёда , 68 байт
Попробуйте онлайн!
Это функция, которая печатает вывод без завершающей строки.
Это было вдохновлено этим ответом .
источник