Это было вдохновлено функцией, которую я недавно добавил в свой язык Add ++ . Поэтому я добавлю короткий ответ в Add ++, но я не приму его, если он победит (это было бы нечестно)
Разве ты не ненавидишь, когда умножаешь числа, а не строки? Таким образом, вы должны исправить это, верно?
Вы должны написать функцию или полную программу, которая принимает две непустые строки в качестве входных данных и выводит их умноженную версию.
Как вы умножаете строки? Я вам скажу!
Чтобы умножить две строки, вы берете две строки и сравниваете каждый символ. Символ с наивысшей кодовой точкой затем добавляется к выводу. Если они равны, просто добавьте символ к выводу.
Строки не гарантируются равными по длине. Если длины отличаются, длина последней строки равна длине самой короткой строки. Ввод всегда будет в нижнем регистре и может содержать любой символ в диапазоне ASCII для печати ( 0x20 - 0x7E
), за исключением заглавных букв.
Вы можете выводить данные в любом приемлемом формате, таком как строка, список и т. Д. Будьте внимательны, целые числа не являются разумным способом вывода в этой задаче.
С помощью входов hello,
и world!
вот как это работает
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Так что окончательный вывод для hello,
и world!
будет worlo,
!
Больше тестов
(без шагов)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
Это код-гольф, поэтому выигрывает самый короткий код! Luok!
Ответы:
Haskell, 11 байт
Попробуйте онлайн!
Ничего особенного объяснить.
источник
zipWith
не так уж странно. Это довольно распространенный функциональный примитив. Идея «сжать» два списка вместе возникает во многих проблемах, и как только вы это сделаете, вам часто захочется применить некоторую функцию к результирующим 2-элементным элементам, отсюда и часть «с».05AB1E , 4 байта
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
ø€à
должен работать, но это не так.Perl 6 , 22 байта
В качестве бонуса он принимает любое количество множителей, а не только два.
источник
Japt , 16 байт
Проверьте это онлайн! Принимает ввод как массив из двух строк.
Отсутствие встроенных модулей минимума и максимума вредит Джапту, но ему все же удается добиться несколько приличного результата ...
объяснение
источник
Желе , 5 байт
Попробуйте онлайн!
Как это работает
пример
Пусть s = смешанный и t = жирный .
ż
доходность["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Последние три элемента являются символами.«
это векторизация, диадический минимум, поэтому он дает['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
удаляет ровно одно вхождение n- го символа во втором массиве из n- й строки / символа в первом массиве, приводя к результату["b", "o", "l", "n", "", "", ""]
.œ-
является мультимножественным атомом вычитания , и быстрый"
делает его векторизованным.Когда напечатано, это просто читает boln .
источник
PHP> = 7.1, 52 байта
PHP Sandbox Online
PHP> = 7.1, 69 байт
PHP Sandbox Online
PHP> = 7.1, 70 байт
PHP Sandbox Online
источник
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Алиса , 8 байт
Попробуйте онлайн!
объяснение
У Алисы также есть этот оператор (который я назвал наложением ), но он не ограничивает вывод длиной более короткой строки (вместо этого добавляются оставшиеся символы более длинной строки). Тем не менее, он также имеет оператор для усечения более длинной из двух строк до длины более короткой.
источник
Сетчатка , 28 байт
Попробуйте онлайн!
объяснение
{
Говорит Retina , чтобы запустить всю программу в цикле до тех пор, пока не сможет изменить рабочую строку.O
делает это этапом сортировки, который по умолчанию сортирует непустые строки.^
Опция меняет результат. Таким образом, по сути, мы получаем обратную сортировку двух строк, если они не пустые, помещая строку с большим начальным символом вверху.Откажитесь от пустых строк, если они есть.
Если осталась только одна строка, одна из строк была пуста, и мы также удаляем другую, чтобы остановить процесс.
Здесь много настроек Это соответствует (
M
) первому символу в рабочей строке (^.
), возвращает его (!
), печатает его без завершающего перевода строки (\
), а затем возвращает рабочую строку к ее предыдущему значению (*
). Другими словами, мы просто печатаем первый символ рабочей строки (который является максимальным начальным символом) без фактического изменения строки.Наконец, мы удаляем первый символ из каждой строки, чтобы следующая итерация обрабатывала следующий символ.
источник
G`.
этом нет необходимости, хотя при этом выводится дополнительный символ новой строки, который можно удалить с помощью^.+¶$
или с помощью префикса a\
в начале ответа.\
).C 58 байт
Попробуйте онлайн
источник
f(s,t)char*s,*t;{
дает ту же длину.JavaScript (ES6),
4745 байтУдобно
c>b[i]
возвращает ложь за конецb
. Редактировать: 2 байта сохранены благодаря @ETHproductions.источник
Желе , 6 байт
Попробуйте онлайн!
источник
żṢ€Ḋ€
иżṢ€ZṪ
оба сохраняют байт.Mathematica, 78 байт
В Mathematica уже есть другой ответ . Этот ответ принимает входные данные в виде списка строк, поэтому
/@
может использоваться#
вместо{##}
. И мы можем простоMap
длинное имя функции на объекте вместо того, чтобы назначать его переменным. (фактически каждое имя встроенного символа Mathematica используется в функции не более одного раза)источник
Java 8,
12412011763 байта-4 байта благодаря @ Khaled.K .
-3 байта благодаря @Jakob .
Входные данные представляют собой два символьных массива и заканчиваются символом
ArrayIndexOutOfBoundsException
.Объяснение:
Попробуй это здесь.
источник
C #,
8178 байтC # имеет неявный
char
дляint
преобразования (потому чтоchar
на самом делеint
под ним), и это приятно, и вместо того , чтобы искать кратчайшие строки просто попробовать до отказаисточник
a=>b=>
, скомпилировав вFunc<string, Func<string, string>>
. Вы можете удалить скобки вокруг цикла for, чтобы сохранить 2 байта.C# has implicit char to int conversion
верно, потомуchar
чтоint
внизу.sizeof(int) == 4
ноsizeof(char) == 2
.MATL , 8 байт
Ввод - это массив ячеек строк в формате
{'abcd' 'efg'}
Попробуйте онлайн!
Кроме того, это также работает для более чем двух строк .
объяснение
Рассмотрим ввод
{'blended' 'bold'}
. Стек показан вверх ногами, более свежие элементы представлены ниже.источник
R, 103 байта
Код:
Тестовые случаи:
источник
Python 2 ,
474434 байта-3 байта благодаря musicman523. -10 байт благодаря Blender.
Принимает ввод в виде списка строк.
Попробуйте онлайн!
источник
V ,
28, 24, 21 байтПопробуйте онлайн!
HexDump:
Три байта сохранены благодаря @ nmjcman101!
Объяснение:
источник
dG
необходимо? Не все ли новые строки удаляются вместе сÍî
anyways?CJam , 12 байт
Ввод - это список из двух строк. Программа завершается с ошибкой (после правильного вывода), если две строки имеют разную длину.
Попробуйте онлайн!
объяснение
источник
Clojure, 31 байт
Yay для композиции функций :) Возвращает последовательность символов вместо строки, но в Clojure они в основном работают одинаково, за исключением случаев печати или сопоставления регулярных выражений.
К сожалению
max
, не работает с персонажами.источник
max
не работает, ноmax-key
работает.#(map(partial max-key int)% %2)
Это точно такой же счетчик байтов.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 байтовОбъяснение:
Предыдущие версии:
источник
Retina ,
5536 байтПопробуйте онлайн! Объяснение: Строка имеет префикс для хранения результата. В то время как в обеих строках по-прежнему остаются символы, входные данные сортируются, и начальный символ с самой высокой кодовой точкой перемещается в результат, а другой ведущий символ удаляется. Наконец результат печатается.
источник
Шелуха , 2 байта
Попробуйте онлайн!
"Ungolfed" / Разъяснения
Использует
zip f
это, усекает более короткий список так, что всегда есть два аргумента дляf
, напримерzip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:источник
Котлин,
504137 байт-9 байтов с синтаксисом ссылки на функцию -4 байта с функцией расширения
Если s и x находятся в области видимости, а не в функции, этот метод составляет всего 16 байт.
демонстрация
источник
PowerShell, 75 байт
Сохранить как файл .ps1 и запустить
Ранее 78 байтов:
источник
J, 25 байт
объяснение
половина байтов идет на решение, гарантируя, что оба входа имеют более короткую длину входных данных (хотелось бы видеть улучшение в этой части, если у кого-то есть):
<.&#
является минимумом из двух длин и{."1,:
принимает столько символов из обеих строк двухстрочной таблицы, которая состоит из левой строки, расположенной сверху правой строки.Используйте глагол Under,
&.
чтобы преобразовать каждый символ в его индекс ascii, возьмите максимум двух чисел и затем преобразуйте обратно в символы.Попробуйте онлайн!
источник
[:>./&.(3&u:)<.&#$&>;
u:
был ТИЛ для меня.Коллекции Java 8 + Eclipse,
7064 байтаa
иb
обаMutableList<Character>
из коллекций затмения.источник
Добавить ++ , 8 байт
Попробуйте онлайн!
В версиях с 0.4 по 1.11
^
экспоненты имеют два числа или «умножают» две строки в зависимости от типа аргументов.источник
Mathematica, 102 байта
вход
источник
L@a~Min~L@b
сохраняет один байтAPL (Dyalog) , 22 байта
Принимает две (или более!) Строки в качестве правильного аргумента.
Попробуйте онлайн!
{
анонимная функция, где правильный аргумент представлен ⍵⎕UCS
символы из U- Никода C характерно S et, которые соответствуют⌈⌿
максимальное значение в каждом столбце⎕UCS
кодовые точки из U Никод С Характер S et для↑
Matrified (матрица из списка строк)⍵
аргументы↑¨⍨
каждый ограничен в⌊/
минимум≢¨
длина⍵
аргументов}
источник