Недавно была проблема с умножением строк. Он показал нам, как мы можем умножать не только числа, но и строки. Однако мы все еще не можем правильно умножить число на строку. Была одна попытка сделать это, но это, очевидно, неправильно. Нам нужно это исправить!
Твое задание:
Напишите функцию или программу, которая умножает два ввода: строку и целое число. Чтобы (правильно) умножить строку на целое число, вы разбиваете строку на символы, повторяете каждый символ число раз, равное целому числу, а затем склеиваете символы обратно вместе. Если целое число отрицательное, мы используем его абсолютное значение на первом шаге, а затем переворачиваем строку. Если вход равен 0, ничего не выводить (все, что умножено на 0, равно нулю).
Входные данные:
Строка, состоящая исключительно из печатных символов и символов новой строки ASCII и целого числа (возможно, отрицательного).
Выход:
Строка, умноженная на целое число.
Примеры:
Hello World!, 3 --> HHHeeellllllooo WWWooorrrlllddd!!!
foo, 12 --> ffffffffffffoooooooooooooooooooooooo
String, -3 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 -->
Hello
World!, 2 --> HHeelllloo
WWoorrlldd!!
Подсчет очков:
Это код-гольф , выигрывает самый низкий счет байтов!
источник
Ответы:
Желе ,
654 байтаПопробуйте онлайн!
Как это работает
источник
JavaScript (ES6), 63 байта
Принимает ввод в синтаксисе карри
(s)(n)
.Контрольные примеры
Показать фрагмент кода
источник
reduce
!Python 3 , 44 байта
Попробуйте онлайн!
источник
f(n,*s)
считается действительнымPython 2 ,
59575046 байт-2 байта благодаря Anders Kaseorg. -4 байта благодаря Деннису.
Попробуйте онлайн!
источник
05AB1E , 10 байтов
Попробуйте онлайн!
источник
²0‹i
это не лучший маршрут, и придумали буквально 0 альтернатив.²0‹i
раньше, и я всегда думаю, что должно быть что-то лучше.Ä.D)øJ¹0‹iR
это лучшее, что я могу сделать, не копируя тебя, я думаю, что твоя оптимизирована.è
здесь , хотя я не могу найти способ применить это в этом сценарии. Сохранит максимум 1 байт, если что.SÂΛ@²Ä×J
, с помощьюÎ
нажатия 0 и ввода работает, если вы измените порядок. Сохраняет 1 байт! (Также заменил if, поэтому его не нужно закрывать)MATL , 9 байт
Входные данные: число, затем строка.
Строки с символами новой строки вводятся с помощью полукокса
10
следующим образом :['first line' 10 'second line']
.Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Рассмотрим входы
-3
и'String'
.источник
Haskell ,
4136 байтПопробуйте онлайн!
Пример использования:
f (-3) "abc"
доходность"cccbbbaaa"
.Редактировать: -5 байт благодаря xnor!
источник
(<*[1..n])
для((<$[1..n])=<<)
.V ,
29, 23, 18, 17 байтовПопробуйте онлайн!
HexDump:
Спасибо @ nmjcman101 за сохранение 6 байтов, что побудило меня сохранить еще 5!
Первоначальная редакция была довольно ужасной, но теперь я действительно горжусь этим ответом, потому что он обрабатывает отрицательные числа на удивление хорошо. (V не имеет никакой числовой поддержки и отрицательных чисел)
Объяснение:
На данный момент буфер выглядит так:
Важно не завершающий символ новой строки, а то, чтобы на нем был курсор.
источник
0
особые случаи в V оказались очень полезными.R
837876 байтАнонимная функция.
Фредерик спас 3 байта, Джузеппе спас
24.Объяснение:
тесты:
источник
rep(foo,,,3)
илиrep(foo,e=3)
(той же длины) ;-)a=
. Следовательно, я использовал значениеa
в качестве аргумента для обратной функции, еслиi<0
, имея условный возврат функции (именно поэтому мне понадобились обратные кавычки). Но мне нужно было также применить функцию тождества дляi>=0
случая, поэтому я использовал,(
что достаточно близко.(
это на самом деле функция. R странно.(
семантически эквивалентны идентичностиfunction(x)x
05AB1E , 10 байтов
Попробуйте онлайн!
объяснение
источник
PHP> = 7.1, 65 байт
PHP Sandbox Online
источник
$n<0
имеет то же значение, что$n<0?:0
и на 3 байта короче :-)Brain-Flak (BrainHack) ,
154152 байтаПопробуйте онлайн!
Просто здесь, чтобы дать DJMcMayhem некоторую конкуренцию. ;)
объяснение
Вот модифицированная версия объяснения DJMcMayhem
источник
J ,
191513 байтПопробуйте онлайн!
объяснение
источник
(#~|)A.~0-@>]
за 13 байт#~ ::(|.@#~|)
Дьялог АПЛ, 15 байт
Строка в качестве левого аргумента, число в качестве правого аргумента.
Попробуйте онлайн!
Как?
⍺/⍨
- повторить строку|⍵
- абс (число) раз⌽⍣
- отменить, если(⍵<0)
- число ниже 0источник
MATLAB, 37 байт
Это определяет и анонимную функцию с входами
s
: string иn
: number.Пример работы:
источник
repelem
существует.repelem
в Октаве, а покаBrain-Flak (Haskell) ,
202192 байтаПопробуйте онлайн!
Вероятно, это худший из возможных языков, но это сделано. Спасибо @Wheatwizard за предоставление интерпретатора Haskell, который допускает смешанные форматы ввода. Это было бы около 150 байтов больше без него.
Объяснение:
источник
Java (OpenJDK 8) ,
9998898785 байтПопробуйте онлайн!
источник
s[(n<0?-l-~i:i)/n]
i
условиеs->n->{for(int l=s.length*(n<0?-n:n),i=0;i++<l;)System.out.print(s[(n<0?i-l:i-1)/n]);}
. Другой байт можно сохранить, выполнив итерацию от -l до 0 (s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);}
).Октава , 49 байт
Попробуйте онлайн!
Я предоставлю объяснение завтра.
источник
Рубин , 59 +1 = 60 байт
Использует
-n
флаг.Попробуйте онлайн!
источник
eval$_
короче чем$_.to_i
на 1 байт.String#chars
Можно также принять блок так же, какString#each_char
можно. Наконец, измените ввод перед обработкой каждого символа, чтобы вы могли напечатать его напрямую (переключив свой флаг на-n
). Все это объединяется, чтобы стать 55 + 1 = 56 байтов.Древесный уголь , 16 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
CJam , 9 байт
Попробуйте онлайн!
источник
Japt , 12 байт
Попробуйте онлайн!
объяснение
Неявный ввод строки
U
и целого числаV
.Map (
®
) каждая букваU
(неявно) для себя повторяется (p
)abs(V)
(Va
) раз.Превратите строку в массив chars (
¬
) и уменьшите (r
), что с ..."!+".slice(sign(V))
- это либо уменьшается с+
→a + b
, либо с!+
→b + a
.Спасибо @Arnauld за идею сокращения назад!
источник
£gY*Vg)pVa
должно привести к более короткому решению, но мой мозг отключился к праздникам, поэтому я не могу понять это. Вы можете быть в состоянии сделать что-то с этим, хотя.WendyScript , 46 байт
Попробуйте онлайн!
Объяснение (Ungolfed):
источник
C89 байт
Я увидел версию Бена Перлина и подумал: а не можешь ли ты быть еще короче, а также иметь полную программу? конечно,
atoi()
иputchar()
не так ли дорого с точки зрения байтов? Кажется, я был прав!источник
Pyth,
1311 байтПопытайся!
-2 байта благодаря @jacoblaw
объяснение
старый подход, 13 байтов
Попытайся!
источник
Python 3 , 68 байт
Попробуйте онлайн!
источник
If the integer is negative, we use its absolute value in the first step, and then reverse the string.
)
n<0 else
=>n<0else
QBIC , 32 байта
объяснение
источник
Mathematica, 89 байт
вход
источник
Braingolf , 22 байта
Попробуйте онлайн!
Эх, неплохо.
Принимает ввод в виде целого числа и массива символов.
В качестве альтернативы:
Braingolf , 31 байт
Попробуйте онлайн!
Принимает ввод в виде целого числа и строки
источник
C 109 байтов
Начиная с объявления функции, которая принимает целое число и строку и создает строку (кажется, подразумевается, что память не выделена заранее и должна быть создана), кажется, что прямой подход короче, чем любые попытки очистить, которые я пытался ,
}
источник