Строка x
генерирует строку, y
если y
является подстрокой бесконечного повторения x
. Например abc
генерирует bcabcab
.
Напишите программу, чтобы найти самую короткую, лексикографически самую маленькую строку, которая будет генерировать ввод. Вам дают на стандартный ввод одну строку текста. Вы должны напечатать генерирующую строку в стандартный вывод. Например:
вход
bcabcabca
выход
abc
Самый короткий код выигрывает. Вы можете предположить, что ввод содержит только символы az (и завершающий перевод строки, если хотите).
code-golf
kolmogorov-complexity
subsequence
Кит Рэндалл
источник
источник
bac
в вашем примере, а неabc
?bac
s.(bca)^n
, что означаетbca
, что так же верно для данного примера, какabc
.bca
не самый маленький лексикографически.Ответы:
Ruby 1.9, 40 знаков
Предполагается, что ввод не заканчивается новой строкой. Также это, вероятно, смехотворно медленно для больших результатов.
источник
Питон
88185 символовВыход:
источник
bacabac
правильно.Haskell,
299128 символовСпасибо Джлой! Теперь версия намного короче, и я считаю, что это правильно.
источник
cabcabcabc
производитabcabc
, так что это решение не совсем там. Я думаю, что вам нужно изменитьq++q++q
, чтобы получить желаемый результат. Моя быстрая попытка починить неровности до 145 символов. (Спойлеры здесь: gist.github.com/1035161 )(/=)""
состояние? Кажется, он ничего не делает. Также помогает избавление от лямбд: вы можете полностью избавиться от w с помощью.
оператора и изменить основную функцию,main=interact s
чтобы сохранить пару символов.permutations
вместоtails
.Питон,
121137129 символовРЕДАКТИРОВАТЬ: исправлена ошибка, замеченная JiminP
источник
aabab
для строкиababa
... :(Руби 1.9, 36
Использует тот же подход, что и решение Ventero.
источник
Python,
161 159 166 140 141 134132 символаРЕДАКТИРОВАТЬ : Гольф-код после прочтения комментария Жюля Оллеона. Удален «ошибка» , что
bcdabcdab
приводит кabbc
.EDIT2 : Исправлена ошибка (
abaa
результатыaaa
), замеченная Жюлем Оллеоном.Я не очень хорошо знаю Python, поэтому этот код, вероятно, «не в гольфе».
Я люблю это правило:
Вы можете предположить, что вход содержит только символы az ...
Входы и выходы
источник
i-=1
вместоi=i-1
. Аналогично для приращения.Mathematica 124 байта
Пробелы и символы новой строки (при наличии точек с запятой на концах строк) не имеют смысла в Mathematica и включены сюда для удобства чтения.
Ввод идет между кавычками в первой строке. Если преобразовать как функцию, она принимает строковый ввод примерно так:
тогда это 128 байтов.
For
Цикл занимает первыеi
символы на входе и повторяет их , по крайней мере вплоть до длины входа, а затем проверяет , является ли входная подстрока результата. Найдя длину периода строки,StringPartition
команда объединяет две копии этого периода и берет из нее все подстроки этой длины (в основном получает все циклические перестановки), а затемFirst@Sort
находит первую из них при лексикографическом порядке.источник
javascript 96 символов
Рабочий планкр
источник