Входные данные:
- Строка (фрагмент-волна) с длиной
>= 2
. - Положительное целое число n
>= 1
.
Выход:
Мы выводим однолинейную волну. Мы делаем это, повторяя входную строку n раз.
Правила соревнований:
- Если первый и последний символ входной строки совпадает, мы выводим его только один раз в общем выводе (т. Е.
^_^
Длины 2 становится,^_^_^
а не^_^^_^
). - Входная строка не будет содержать пробелов / табуляции / новых строк / и т. Д.
- Если ваш язык не поддерживает символы не ASCII, тогда это нормально. Пока это все еще соответствует требованию с ASCII-только волновым входом.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
_.~"( length 12
_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(
'°º¤o,¸¸,o¤º°' length 3
'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'
-__ length 1
-__
-__ length 8
-__-__-__-__-__-__-__-__
-__- length 8
-__-__-__-__-__-__-__-__-
¯`·.¸¸.·´¯ length 24
¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯
** length 6
*******
String & length of your own choice (be creative!)
>= 1
» кажется мне довольно приятным ... :)Ответы:
Пайк,
151410 байтПопробуй это здесь!
источник
Python 3, 32 байта
Объединяет
n
копии строки, удаляя первый символ из всех копий, но первый, если первый символ соответствует последнему.источник
s[0]
и,s[-1]
кажется, ссылаюсь на первый и последний байт, а не на первый и последний символ. Изменить: ах, подождите, это Python 2 против Python 3. Он работает правильно в Python 3.05AB1E , 13 байтов
Использует кодировку CP-1252 .
Попробуйте онлайн!
объяснение
-___-
и3
используется в качестве ввода, например.источник
JavaScript (ES6), 47 байт
источник
s=>n=>...
вместо(s,n)=>
Perl, 29 байт
28 байт код + 1 для
-p
.Спасибо @Dada за помощь в сборе нескольких байтов!
использование
Интернет пример.
источник
<>
вместо того$'
, чтобы избавиться от него-0
. И тогда вы можете использоватьs///e
вместо того,//;$_=
чтобы выиграть еще один байт :-)$
чтобы соответствовать концу, но при этом сохраняются мои байты как не используя'
означает, что я могу отбросить его, чтобы сохранить в файл, чтобы сохранить добавив 3 для-p
и сбросить его обратно до 1!$
вместо новой строки, которую вы имели ранее. (Извините, мой комментарий не был очень подробным, я спешил ...)<>
в строке замены. Но еслиn
разделить пробелом вместо новой строки, количество символов может быть немного уменьшено:s/(.+?) (\d+)/$1x$2/e
Perl, 23 байта
Включает +1 для
-p
Введите строку ввода с последующим номером в отдельных строках на STDIN
wave.pl
:Если первый символ в слове не является специальным символом регулярного выражения, эта 22-байтовая версия также работает:
источник
/g
модификатор, когда вставили его ;-)MATL,
191714 байтовЭто работает для ASCII на онлайн-интерпретаторе, а также для Unicode и ASCII при запуске с использованием MATLAB.
Попробуйте онлайн!
объяснение
источник
Сетчатка , 29 байт
Линии 2 и 5 имеют завершающий пробел.
Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
источник
Пакет, 117 байт
Принимает количество повторений в качестве параметра командной строки и считывает строку из STDIN.
источник
Pyth, 13 байт
Тестирование!
Объяснение, чтобы следовать.
источник
Гема, 41 персонаж
Образец прогона:
источник
PowerShell v2 +, 48 байт
Выводит всю строку один раз, за которой следуют n-1 копии строки или подстроки, в зависимости от того, совпадают ли первый и последний символы.
В
.Substring()
метод выхода из индекса подается в конце строки, так что если имеет$s[0]-eq$s[-1]
значение FALSE (0), мы получаем всю строку. Если это утверждение истинно (1), мы получаем подстроку, начинающуюся со второго символа.источник
VBA 119 байт
Новичок в этой игре и VBA побеждает с самыми высокими байтами: P
PS: не могу поверить, что VBA стоит близко к JAVA HAHA
Объяснение:
источник
CJam,
1615 байтПопробуйте онлайн
Объяснение:
источник
К, 12 байт
Благодарность
источник
{,/y#,$[(*x)~*|x;-1;0]_x}
для 25 байтов обрабатывает первое / последнее совпадение. Если вы счастливы отключающая Правило 1, то вы можете иметь{,/y#,x}
на 8PHP, 72 байта
в PHP 7.1 его можно уменьшить до 65 байт
источник
Пип , 18 байт
Решение Regex, использующее правило «без пробелов во входных данных». Принимает строку из stdin и число в качестве аргумента командной строки.
Попробуйте онлайн!
Объяснение:
Таким образом,
a b
превращается вab
,a a
превращается вa
, и пространство в конце строки удаляется. Затем результат автоматически распечатывается.источник
Haskell, 59 байт
Безголовая версия:
источник
Java 10,
12311110910710210079 байтовПопробуйте онлайн.
Альтернатива с тем же количеством байтов ( 79 байтов ):
Попробуйте онлайн.
Я, конечно, постараюсь ответить на свой вопрос. ;)
-5 байт благодаря @ dpa97 .
-21 байт конвертируется из Java 7 в 10.
Объяснение:
источник
.split
.s.substring(1)
на два байта короче. ;)Javascript ES6, 49 символов
Тест:
источник
QBIC , 65 байт
Я думаю, что я должен добавить LEFT $ и RIGHT $ к QBIC ...
Объяснение:
источник
C #, 79 байт
Немного абсурдный способ повторения строки. Создайте новую строку нужной длины повтора, а затем замените каждый символ строкой повтора. Кроме того, похоже, в значительной степени та же стратегия, что и многие другие.
источник
x
? Возможно, было бы лучше изменить это на пробел, поскольку « строка ввода не будет содержать пробелов / табуляции / новых строк / и т. Д. ».x
.xx...x
Сначала создается строка, а затем заменяется каждаяx
без переоценки строки с самого начала на то, что необходимо заменить.SpecBAS - 68 байт
Использует inline-,
IF
чтобы проверить, совпадают ли первый и последний символы. Если нет, выведите строкуn
количество раз. В противном случае разделите строку на длину-1, повторите это и поставьте последний символ в конце.Может принимать только символы ASCII (или символы, встроенные в SpecBAS IDE)
источник
APL, 19 байт
Использование:
Объяснение:
⊃⍺=⊃⌽⍺
: посмотреть, соответствует ли первый символ последнему символу⍺↓⍨
: если это так, опустите первый символ⊂
: приложить результат⍵⍴
: повтори это⍵
раз1↓
: отбросить первый (это короче чем(⍵-1)⍴
)∊
: получить все простые элементы (отменить бокс)⍺,
: добавить один экземпляр всей строки в началоисточник
Постскриптум, 98 байт
... но вам может понадобиться 'flush', чтобы ваш интерпретатор PS очистил буфер связи, еще шесть байтов :(
источник
Common Lisp (LispWorks), 176 байт
Использование:
Объяснение:
Ungolf:
источник
Vim, 17 байт
Самый простой способ сделать это - использовать регулярное выражение обратной ссылки, которое может определить соответствие первого и последнего символов. Но длинные регулярные выражения длинные. Мы этого не хотим.
Волна для повторения находится в буфере. Я предполагаю, что число, которое будет повторяться, находится в реестре
"a
(введитеqaNq
с N в качестве числа, чтобы установить его). Идея заключается в следующем:Затем
P
удаленный текст@a
раз.lDg*
: Этот маневр создает регулярное выражение, соответствующее любому первому символу, независимо от того, нужно ли его экранировать или нет, или это слово или нет. (*
было бы достаточно, чтобы сделать правильно экранированное регулярное выражение, но добавило бы нежелательный\<\>
мусор, если бы это был символ слова, например_
.)p^
: Последний шаг был грязным. Очистить до исходной позиции, начало строки.v$
В визуальном режиме,$
по умолчанию переходит к AFTER конца строки.?<C-P>$<CR>hd
: Если предыдущее регулярное выражение существует в конце строки, этот поиск будет перемещен к нему; в противном случае оставайтесь за концом строки. Двигайтесь влево оттуда, и мы выполняем (утомительное) удаление, которое нам нужно.@aP
: Запустите число repeat как макрос, который будет использоваться в качестве аргументаP
.источник
Рубин, 38 байт
Я думаю, это довольно очевидно. Мне все еще интересно, есть ли более краткий способ представить
s[0..-2]
блок, но я еще не нашел его.источник
Java (117 байт)
источник
b>0;b--
в гольфb-->0;
. Кроме того, почемуb+
там вc+=b+a.substring
? Тем не менее, это отличный первый ответ, если вы придумали его самостоятельно. Приятного пребывания здесь на PPCG! :) Кроме того, вы можете найти советы по игре в гольф на Java интересными для чтения.