Вступление
Допустим, что S 1 = a...b
и S 2 = ..c..
. Если мы поместим их друг на друга, мы получим:
a...b
..c..
Мы объединяем обе строки с .
жидким символом (который может перекрываться). Мы получаем это:
a.c.b
Если одна строка длиннее другой, мы просто применяем тот же алгоритм:
a.....b
..c..
becomes:
a.c...b
и
a.....b
..c.......
becomes:
a.c...b...
Если два символа сталкиваются, мы просто используем нижний символ, например
a..b
...c
becomes:
a..c
Задание
Если даны две непустые строки, выведите объединенную строку. Обратите внимание , можно предположить , что вход содержит только периоды и строчные буквы (или прописные буквы , если это более удобно).
Контрольные примеры
Input Output
a....b ..c... a.c..b
aaaaaa bbbbbb bbbbbb
ab.ab. b.b.b. bbbab.
a.......b c c.......b
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
a.....b
..c.......
? Какой выход тогда?a.c...b...
.Ответы:
Желе , 5 байт
Ввод через аргументы командной строки.
Попробуйте онлайн!
объяснение
Это прямой порт моего ответа CJam (см. Объяснение, почему это работает):
источник
CJam, 9 байт
Проверьте это здесь.
объяснение
Использует тот факт, что
'.' < upper case letters < lower case letters
. Таким образом, когда берется поэлементный максимум между двумя строками, любая буква переопределяет a.
, но мы можем сделать букву из второго ввода переопределив букву из первого, если мы в верхнем регистре первый. Смешение? Вот один из тестов в качестве примера:Преобразование первого в верхний регистр:
Возьми поэлементный максимум:
Преобразовать обратно в нижний регистр:
И вот как код делает это:
источник
eu
/el
трюк!Javascript ES6,
5255 символовТестовое задание
источник
f('c', 'a....b')
Пиф, 11
Попробуйте онлайн или запустите Test Suite
источник
Серьезно, 10 байт
Попробуйте онлайн!
Использует ту же стратегию, что и и ответ Мартина CJam
Объяснение:
источник
Октава, 50 байт
источник
!=
на>
Haskell,
4342 байтаПример использования:
"ab.ab." # "b.b.b."
->"bbbab."
.Как это устроено:
если оба списка не пустые, выберите заголовок первого списка, если заголовок второго списка
"."
, либо выберите заголовок второго списка. Добавьте рекурсивный вызов с хвостами списков.если хотя бы один список пуст, добавьте оба списка.
Редактировать: @Lynn сохранил байт. Благодарность!
источник
c<'a'
чтобы сохранить байт.Python 2, 47 байт
источник
Юлия, 101 байт
Это функция, которая принимает две строки и возвращает строку.
Мы вычисляем
m
как максимальную длину двух входных данных, затем определяем функцию,r
которая дополняет ввод справа.
s до длины,m
и сохраняем ее как аргумент функции. Затем мы вводимzip
правильные входные данные и проверяем минимум (как определено кодом ASCII) каждой пары. Если это.
, мы используем тот символ, который имеет больший код, в противном случае мы используем тот, который поступил из второго ввода. Полученный массивjoin
преобразуется в строку и возвращается.источник
C
10689 байтТест живи на идеоне .
источник
Сетчатка , 55
Строка 5 - это один пробел. Строка 6 - пустая строка (без завершающего символа новой строки).
Попробуйте онлайн.
Я начал этот в GNU sed (с опцией -r). Прямой порт в Retina, когда я разобрался с регулярными выражениями. Версия sed:
источник
a..k.f....b c...f.g...g. => .c..kffg...g
Python 2, 70 байт
Попробуй это здесь!
Сначала мы создаем zip обе строки в один список. Если вторая строка длиннее первой, она дополняется
None
(map(None,x,y)
делает это).Затем мы перебираем этот список,
j
будучи символом из первой строки и символомk
из второй строки. Мы выбираемk
если это не точка и иначеj
.Это может быть 61 байт, если я могу вывести результат в виде списка символов вместо строки.
источник
Perl, 48 + 3 = 51 байт
Бах не может найти более короткое решение. (Тот же подход, что и в ответе @ Qwertiy на JavaScript).
Требует
-pl
и принимает данные отstdin
и-i
источник
$_^=$^I^$^I;s/\.|\0/substr$^I,pos,1or$&/ge
PHP> = 7.1, 58 байт
Онлайн версия
источник
q / kdb +,
4340 байтРешение:
Пример:
Объяснение:
Примечания: я использую преимущество «Учитывая две непустые строки » и предполагаю, что входные данные являются строками. В kdb
"c"
это атом,(),"c"
это строка, в противном случае нужно добавить 6 байтов к партитуре, поскольку мы не можем использовать$
для дополнения атома ...источник