Вызов:
Получив список многострочных строк, наложите их (слева вверху) и выведите результат.
Пример:
Вход: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Выход:
cbaa
bbaa
bbaa
aaaa
Правила соревнований:
- Формат ввода гибкий. Вам разрешено получать входные данные в виде двухмерного списка строк (т.е.
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) или трехмерного списка символов (т.е.[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
). Вам разрешено принимать все входы один за другим через STDIN. И т.п. - Формат вывода строгий. Вы можете распечатать или вернуть многострочную строку. (Если на вашем языке нет строк, вывод в виде 2D-списка символов допускается в качестве альтернативы. Но только если на вашем языке вообще нет строк.)
- Порядок ввода-списка, конечно, важен (но вы можете принимать входные данные в обратном порядке, если захотите).
- Входы будут содержать только ASCII для печати в диапазоне Unicode (
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
). - Входные данные будут только прямоугольниками (поэтому никаких странных форм). Выходные данные не являются необходимыми прямоугольниками, хотя.
- Конечные пробелы и один завершающий перевод строки разрешены. Ведущие пробелы и / или переводы строк не.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Вход: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Выход:
cbaa
bbaa
bbaa
aaaa
Вход: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Выход:
00145
01121
012
00
Вход: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Выход:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Ответы:
Желе , 3 байта
Попробуйте онлайн!
Давно не пользовался желе, но я думал, что вызов в комментариях можно преодолеть. Очень напрямую использует логические и (
a
) для выполнения операции стекирования между каждым элементом ввода (/
).Y
используется для печати в требуемом формате.источник
ḷ""/Y
с обратным списком ввода. Даже не знал оa
..JavaScript (Node.js) , 24 байта
Сохранено 2 байта благодаря @Grimy
Предполагается, что возвращенная строка печатается на терминале, который поддерживает управляющие коды ANSI . Содержит непечатный символ ESC, который экранирован (без каламбура), как
\x1B
показано ниже.Это не работает на TIO, но вы можете попробовать это онлайн! чтобы увидеть сырой выход вместо этого.
Как?
Используемые последовательности CSI :
ED (Стереть на дисплее):
ESC[2J
где2 означает «очистить весь экран»
CUP (Положение курсора):
ESC[H
что означает «перемещает курсор в строкуn , столбец m », где n и m опущены и неявно установлены в 1 (левый верхний угол экрана).
Пример вывода
источник
;
. Кроме того, я думаю, что это должен быть «JavaScript + терминал» или что-то подобное, что не конкурирует с чистым JavaScript.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Поскольку есть только две подстроки, разделитель, предшествующий последней подстроке, является единственным, и его можно опустить.\x1B[H
нужен ли первый +? Разве это не начинается с верхнего левого угла по умолчанию, и вам нужно только сбросить его после каждого ввода (что делает объединение)? Или он изначально запускается где-то еще по умолчанию, и вы должны явно позволить ему начать с той позиции курсора, чтобы он успешно вернулся в эту позицию в соединении?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
сf(input_here)
будет производить тот же результат , какprint(f(input_here))
? Так что я не понимаю, почему вы не можете опуститьprint
и просто вернуть строку.р ,
120,111110107 байтовПопробуйте онлайн!
Функция, принимающая список матрицы символов (допускается ввод 3D).
(как вы можете заметить по количеству байтов, это не очень легко сделать в R ...)
источник
array
вместоmatrix
!ncol
(вы можете транспонировать, чтобы получитьnrow
).Python 2 , 88 байт
Попробуйте онлайн!
Пояснение (с примером):
Принимает 2D-список в качестве входных данных.
Сначала входной список архивируется, чтобы получить строки каждого входного прямоугольника (
map(None,l)
это же самое длиннее zip):Каждая из этих строк затем фильтруется для удаления
None
s и снова архивируется:Какой список символов для каждой позиции желаемого результата. Эти списки снова фильтруются, и последний берется:
Наконец, полученные списки объединяются и печатаются:
источник
R
10797 байтПохоже, не работает на TIO, что может быть связано с использованием
\r
символа возврата каретки. Это работает на моей локальной установке R.Принимает ввод как список, содержащий вектор строк:
Зацикливает строки каждого прямоугольника, печатая возврат каретки после каждого, перезапуская строку.
Если мы немного растянем правила, мы можем покончить с проверкой длины ввода и просто зацикливаться бесконечно, печатая огромное количество новых строк:
R 85 байт
источник
\r
, и добро пожаловать обратно! Просто заметьте, я думаю, что это работает только в интерактивных R сессиях (когдаinteractive()
возвращает true)rscript
из командной строки. Я подозреваю, что это вещь Windows / Linux, так как Windows использует\r\n
для перевода строки и Linux\n
.APL (Dyalog Unicode) , 22 байта SBCS
Функция анонимного неявного префикса, принимающая список двумерных массивов символов в качестве аргумента. Печать.
Попробуйте онлайн!
Это работает, создавая холст, затем добавляя его в список блоков, и уменьшая (сворачивая) с помощью функции, которая помещает блоки в угол.
↑
смешайте 2D-блок, чтобы создать ортогональный 3D-блок, заполняя их пробелами по мере необходимости1⌷
взять первый слой⊂
заключите это,∘
затем⌽,
добавьте обратный список блоков(
…)
Применить следующую молчаливую функцию:{
…}/
Уменьшить, используя следующую анонимную лямбду:⊢⍵
с правильным аргументом как холст ...⍺@(
… Дополнить)
элементами левого аргумента, расположенными по следующим индексам:⍴⍺
форма левого аргумента⍳
в ɩ ndices массива этой формы⊃
раскрыть (потому что сокращение прилагается, чтобы снизить ранг)источник
Haskell, 66 байт
Входные данные принимаются в виде списка строк в обратном порядке, например, для первого теста:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Попробуйте онлайн!
источник
05AB1E , 12 байтов
Решение Python для порта TFeld
2 байта сэкономлено благодаря Грими
Попробуйте онлайн!
объяснение
Альтернативная 14-байтовая версия
Попробуйте онлайн!
объяснение
источник
--no-lazy
это исправление, чтобы по-прежнему использовать карту / фильтр с печатью для неявногоy
, чтобы сохранить байт по сравнению сvy...,
:) Я знал, что это работало в устаревшей версии, но в новой версии это также вывело бы[...]
, Не знал, что это из-за отсутствия--no-lazy
. ;) Что касается самого ответа, очень приятно! Я знал, что кумулятивное снижение было необходимо, но не мог действительно решить это, когда я попробовал это сам. Вы делаете это выглядит так просто ..õζεõK
может бытьζεðK
,õζõδK
может бытьζðδK
.Холст , 5 байт
Попробуй это здесь!
Если перекрытия
/
+\
→X
,-
+|
→+
и т. Д. Будут в порядке, 2 байта будут работать.источник
Python 2 , 77 байт
Попробуйте онлайн!
источник
PowerShell 6 , только консоль, 20 байт
основываясь на ответе Арно . Это работает только с консолью и не работает на TIO.
Попробуйте онлайн!
PowerShell , 103 байта
Попробуйте онлайн!
раскатали:
источник
C # (.NET Core) , 68 + 23 = 91 байт
23 байта для импорта,
using C=System.Console;
Не работает в TIO, так как это не консоль.
Попробуйте онлайн!
источник
Рубин , 67 байт
Ввод - это список строк. Создает список строк и выполняет перезапись при прохождении через входы, а затем соединяет их с новой строкой (представленной переменной
$/
) в конце, чтобы соответствовать строгому выводу.Попробуйте онлайн!
источник
C (GCC, MinGW) 138 байтов
Предполагается, что CR помещает курсор в начало текущей строки.
Протестировано с:
источник
Октава ,
7167 байтФункция, которая принимает вертикальный массив ячеек с символами и возвращает матрицу с символами.
Попробуйте онлайн! Или проверьте все тестовые случаи .
источник
Javascript (браузер) ,
216208204 байтаМоя попытка в этом. Я не в восторге от размера, и наверняка должно быть что-то еще для улучшения, но я не настолько опытен в игре в гольф.
В любом случае, то, что он делает, это сначала разбивает все строки, затем переворачивает все строки, а затем выполняет цикл в операции сокращения. переворачивает padStart. все все строки вместе. Затем снова переверните все строки, а затем соедините их с помощью новых строк.
Отдельное спасибо Кевину Круйссену за напоминание о том, что последняя часть цикла for происходит в конце, и общая экономия байтов составляет 8 байтов.
источник
('')
могут быть два `, чтобы сохранить четыре байта :)for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
сfor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
Сначала присваивается(j=a[i])
, то если-заявление сделано сif(!...)j=b[i];
(где...
это(j=a[i])
, так обновленной стоимостиj
), и затем;a[i]=b[i++].padStart(j.length,j))
выполняется в конце итерации для цикла .. Не знаете , где проблема, и это похоже на работу?C (gcc) ,
5147 байтовПопробуйте онлайн!
-4 байта благодаря потолку.
Использует последовательности CSI для сохранения / восстановления позиции курсора. Просто перебирает переданный массив строк (в том же формате, что и
argv
) и печатает<save position>string<restore position>
для каждого.При этом курсор остается в левом верхнем углу, поэтому при работе на терминале важно оставить после себя достаточно новых строк, чтобы подсказка не загромождала ввод.
источник
Japt
-P
, 7 байтПринимает ввод как массив многострочных строк, выводит одну многострочную строку.
Попытайся
источник
T-SQL запрос,
297295 байтИспользование ¶ в качестве разделителя и табличной переменной в качестве ввода.
Попробуйте онлайн
источник
Javascript (браузер),
129124 байтаМоя первая попытка игры в гольф. Я читаю ссылки, приведенные в правилах (лазейки, стандартные правила ...), поэтому надеюсь, что сделал что-то не так!
Я сохранил входные данные, как они есть в первом посте (форма плоского массива).
Спасибо Кевину Круйссену за сохранение 5 байтов.
тесты:
Показать фрагмент кода
источник
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
может бытьfor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
которые можно удалить=r[l]?
:)r
. Без этого результат сопоставления был бы возвращен вместо этого.Pyth , 18 байт
Попробуйте онлайн!(примечание: сам код оценивает только один блок, режим набора тестов интерпретатора запускает программу один раз для каждой строки ввода)
На основе решения TFeld's Python 2 .
Объяснение:
для объяснения того, почему сам алгоритм работает, см. ответ TFeld.
источник
Древесный уголь , 4 байта
Попробуйте онлайн (подробно) или онлайн (чисто) .
Объяснение:
Цикл ввода-списка многострочных строк:
И выведите многострочную строку без перемещения курсора:
источник