Слова гирлянды
Гирлянда слово это слово , которое может быть нанизанные , как гирлянду, потому что она заканчивается теми же буквами , что начинается с. Эти группы букв могут даже перекрываться!
Например, underground
это гирлянда слово порядка 3
, потому что она начинается и заканчивается тем же 3 -х символов, und
. Это означает, что это может быть связано как undergroundergrounderground...
.
alfalfa
это тоже слово гирлянды! Это порядка 4. Он начинается и заканчивается alfa
. Это может быть нанизанные так: alfalfalfalfa
.
Процесс, который я называю гирляндой, заключается в том, что, когда вы определяете порядок n
слова гирлянды, вы берете оригинальное слово и добавляете сегмент, необходимый для того, чтобы оно повторялось как время гирлянды n
. Итак, поскольку onion
это 2
слово порядка гирлянд, вы должны взять onion
, отрубить первые 2
буквы, чтобы получить ion
и добавить их к конечному 2
времени, чтобы получить onionionion
.
Задача
Создайте программу или функцию, которая принимает входные данные из стандартного ввода или аргумента функции и печатает или возвращает слово с гирляндой.
Все слова будут в нижнем регистре, и самый высокий возможный порядок для слова length(word) - 1
.
Пример ввода / вывода
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
Это код-гольф , поэтому выигрывает наименьшее количество байтов.
Ответы:
Pyth,
1918 байтПопробуйте онлайн: демонстрация или тестовая привязь
Пояснения:
источник
Python, 60 байт
Надеюсь на лучшее, ну да ладно.
s.find
работает аккуратно здесь вместоnot s.startswith
.источник
Сетчатка , 58 байт
Каждая строка должна идти в свой собственный файл, но вы можете запустить код как один файл с
-s
флагом.Четыре пары замещения делают следующее:
order
количество символов.order
раз.Строка состояния для примера
onion
:источник
Haskell, 64 байта
тесты:
источник
Java,
160157 байтВвод, вывод:
Размещены и с вкладками для удобства чтения:
Предложения приветствуются.
источник
i=0;
?Sed:
8784 персонажа(83 символа кода + 1 символ опции командной строки.)
Образец прогона:
источник
CJam,
2423 байтаПросто чтобы начать это с чего-то ..
Попробуйте онлайн здесь
источник
Матлаб:
978982 байтаФункция, которая использует регулярное выражение с lookbehind и группой захвата:
Это
sum
необходимо для обработки ввода пустой строки (преобразования[]
в0
).Примеры:
источник
REGXY,
5349 байтовИспользует REGXY , язык подстановки регулярных выражений
Обзор: применяется ряд регулярных выражений. Пример выполнения будет выглядеть так:
Подробное объяснение Ниже приводится построчная разбивка регулярных выражений:
Это подстановка регулярного выражения, которая соответствует первой пустой строке (то есть началу строки) и заменяет ее на все справа от match (
$'
), за которым следует хеш. Например, он превратитсяonion
вonion#onion
.Эта строка находит раздел, который перекрывается путем поиска группы символов, непосредственно предшествующих # (
(.+)
), которые совпадают на другой стороне # (\1
). \ K просто означает «забудь, что я сопоставил что-либо», то есть фактически не будет заменено при замене. Это эффективно, это означает, что мы просто добавляем # к позиции после того, как перекрытие было найдено, превращаясьonion#onion
вonion#on#ion
.Начальная буква «а» - это просто метка для регулярного выражения. После этого мы находим первый #, за которым следует один символ (
.
), и фиксируем все после этого до следующего # (.*#
). Мы заменяем это всем справа от совпадения, то есть последним токеном ($ '), за которым следует # ($1
), за которым следует второй токен без символа (мы рассматриваем это как счетчик, уменьшая его при каждой итерации). В случае лука # # на ион, две лексемы мы на обратной ссылки приведены в скобках, и секция весь регулярное выражение соответствует между трубами:onion|(#)o(n#)|ion
. Затем мы заменяем биты, с которыми мы сопоставляем (между каналами)$'
(все справа от совпадения, то есть 'ion'), затем $ 1 (#), затем $ 2 (n #), что означает, что мы заканчиваемonion|(ion)(#)(n#)|ion
(скобки показывают три жетона в строке замены).Если регулярное выражение не соответствует первому чередованию (все до конвейера), мы должны уменьшить наш счетчик до нуля, то есть во втором токене нет символов. Вместо этого мы смотрим на вторую часть шаблона
#.*
. Это просто заменяет все после первого # с$'$1$2
. Поскольку при этом чередовании нет обратных ссылок, и справа от совпадения нет ничего (.*
совпадает до конца строки), мы прекращаем сопоставление и возвращаем результат.Это просто указатель на предыдущую строку, гарантирующий, что мы продолжим выполнять подстановку регулярных выражений, пока она больше не будет соответствовать.
источник
JQ 1,5: 91 символов
(87 символов кода + 4 символа командной строки.)
Образец прогона:
источник
RS ,
5148 байтПРИНЯТЬ ЭТО, РЕТИНА И САМ !!!!! ;)
Отрезать 3 байта благодаря @randomra.
Живая демоверсия и тестовые случаи.
Обратите внимание, что
jackhammer
тестовый пример не существует. В веб-интерфейсе есть ошибка обработки пробелов, из-за которой выводится неверный вывод. Оффлайн версияrs
обрабатывает это правильно.51-байтовая версия:
Живая демоверсия и тестовые примеры для оригинала.
источник
JavaScript (ES6), 95 байт
демонстрация
Firefox только сейчас:
источник
JavaScript (ES6), 82 байта
[Удален мой первоначальный ответ, потому что я теперь изучил ES6 и был заинтересован в поиске рекурсивного решения этой проблемы]
пример
источник
CoffeeScript + ES6, 77 байт
Тот же подход, что и в моем ответе на JavaScript.
источник
С
Гольф: 195 байт - GCC
источник
int
подразумевается ли в (достаточно старых версиях) C?Groovy
755755 байтовУдивительно, как возвращение к чему-то на следующий день может помочь
Ungolfed:
источник
В случае, если кому-то нужен код в JS, чтобы проверить его. Примечание: я прошел строку от конца, чтобы увеличить эффективность:
источник