Язык сценариев работы Flashpoint , 182 байта
f={t=_this;c=count(t select 0);e=[0];i=0;while{i<c*2}do{e=e+[0];i=i+1};m=[e];i=0;while{i<count t}do{r=+e;j=0;while{j<c}do{r set[j*2+1,(t select i)select j];j=j+1};m=m+[r,e];i=i+1};m}
Ungolfed:
f=
{
// _this is the input matrix. Let's give it a shorter name to save bytes.
t = _this;
c = count (t select 0);
// Create a row of c*2+1 zeros, where c is the number of columns in the
// original matrix.
e = [0];
i = 0;
while {i < c*2} do
{
e = e + [0];
i = i + 1
};
m = [e]; // The exploded matrix, which starts with a row of zeros.
i = 0;
while {i < count t} do
{
// Make a copy of the row of zeros, and add to its every other column
// the values from the corresponding row of the original matrix.
r = +e;
j = 0;
while {j < c} do
{
r set [j*2+1, (t select i) select j];
j = j + 1
};
// Add the new row and a row of zeroes to the exploded matrix.
m = m + [r, e];
i = i + 1
};
// The last expression is returned.
m
}
Звоните с:
hint format["%1\n\n%2\n\n%3\n\n%4",
[[1]] call f,
[[1, 4], [5, 2]] call f,
[[1, 4, 7]] call f,
[[6],[4],[2]] call f];
Выход:
В духе задачи:
Желе ,
1211 байт-1 байт благодаря Erik the Outgolfer (нет необходимости использовать замененные аргументы для объединения)
Попробуйте онлайн! Или увидеть тестов .
Монадическая ссылка, принимающая и возвращающая списки списков.
Как?
источник
j00,0jµ€Z$⁺
Haskell , 38 байт
Попробуйте онлайн!
источник
MATL , 12 байт
Ввод представляет собой матрицу с
;
разделителем строк.Попробуйте онлайн!
объяснение
источник
Japt , 18 байт
Проверьте это онлайн! (Использует
-Q
флаг, чтобы результат был проще для понимания.)Похоже на ответ желе, но намного дольше ...
объяснение
Внешняя часть кода - это просто обходной путь для моделирования Jelly's
⁺
:Сам код:
Повторяется дважды, этот процесс дает желаемый результат. Результат неявно печатается.
источник
Шелуха , 12 байт
Принимает и возвращает двумерный целочисленный массив. Попробуйте онлайн!
объяснение
Та же идея, что и во многих других ответах: добавить нули в каждую строку и транспонировать дважды. Операция строки выполнена со сгибом.
источник
Mathematica, 39 байт
Попробуйте в песочнице Wolfram! Назовите это как "
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
".Как и во многих других ответах, это работает, транспонируя и перелистывая нули в каждом ряду, затем снова делая то же самое. Вдохновленный ответом Jelly от Jonathan Allan , но только потому, что я случайно увидел этот ответ
источник
Дьялог АПЛ, 24 байта
4 байта сохранены благодаря @ZacharyT
5 байтов сохранено благодаря @KritixiLithos
Попробуйте онлайн!
источник
1,1,⍴⍵
?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
в 261 1+
!1+
работать?Октава, 41 байт
Попробуйте онлайн!
источник
Python 3 ,
104 101 97 9386 байтw
удалена и один ненужный пробел[a,b]
простоa,b
при добавлении в списокПопробуйте онлайн!
источник
w
и сохранить 2 байта: repl.it/JBPEm+=[r,w]
[j,0]
вj,0
и[r,m[0]
кr,m[0]
?for
отступ цикла на одну вкладку.Python 3, 118 байт
Первый раз в гольф! Не самый лучший, но я очень горжусь, если могу сам так сказать!
источник
+=
и=
окружены пробелами, которые могут быть удалены. Кроме того,+=
два раза подряд можно упростить, например, в одном выраженииe+=str(d)+'0'
for
цикл в одну строкуfor d in c:e+=str(d)+'0'
, но вы можете использовать карту соединения (str, d)) + '0', in which case it becomes pointless to define
e`.z
иr
в одну строку (;
между ними), сохранив байт отступа.R 65 байт
Спасибо Jarko Dubbeldam и Giuseppe за очень ценные комментарии!
Код
Входными данными для функции должны быть матрица или двумерный массив.
Тест
Выход
источник
a=dim(x)*2+1
вместоnrow
иncol
будет лучше. Вы могли бы тогда сделатьy=matrix(0);dim(y)=a
и2*1:a[1],2*1:a[2]
.y=array(0,a)
было бы еще короче.2*1:a[1]
:
*
Mathematica, 55 байт
источник
o={0,0}
может быть уменьшен доo=0{,}
PHP , 98 байт
Ввод в виде 2D-массива, Ввод в виде строки
Попробуйте онлайн!
PHP , 116 байт
Ввод и вывод в виде 2D-массива
Попробуйте онлайн!
источник
Clojure, 91 байт
Перебирает диапазоны в полшага.
источник
Perl 6 , 33 байта
Попробуйте онлайн!
источник
Python 2 , 64 байта
Попробуйте онлайн!
Функция
g
перемежает ввод между нулями. Основная функция транспонирует ввод во время примененияg
, а затем делает это снова. Может быть, есть способ избежать повторения в основной функции.источник
JavaScript (ES6),
7372 байтаОтформатировано и прокомментировано
Вставка нулей по горизонтали и вертикали - очень похожие операции. Идея здесь состоит в том, чтобы использовать одну и ту же функцию g () для обоих шагов.
Контрольные примеры
Показать фрагмент кода
источник
Древесный уголь , 49 байтов
Попробуйте онлайн!
Входные данные представляют собой одну строку, разделяющую строки точкой с запятой.
источник
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
но даже избегая StringMap, я все же думаю, что это можно сделать за 27 байтов.C ++ 17 + Модули, 192 байта
Ввод в виде строк строк из cin , Вывод в cout
источник
C # , 146 байт
Данные
Int32[,]
m
Матрица, которую нужно взорватьInt32[,]
взорванная матрицаGolfed
Ungolfed
Ungolfed читаемый
Полный код
релизы
146 bytes
- Исходное решение.Заметки
источник
(int[,] m)=>
,m=>
достаточно, если вы укажетеm
2D-массив int в своем ответе. Кроме того , вы можете изменить ,,x,
чтобы,x=0,
и избавиться отx=0
в инициализации для цикла для -1 байт. И вы можете удалитьy++
из внутреннего цикла, изменив=m[x,y];
на=m[x,y++];
дополнительный -1 байт. Но +1 от меня, и если я создам порт вашего ответа, он также будет короче, чем мой текущий ответ Java. :)Дьялог АПЛ, 24 байта
Любые улучшения приветствуются и желательны!
источник
Python 2 , 92 байта
Попробуйте онлайн!
источник
Python 3 + Numpy , 87 байт
Попробуйте онлайн!
источник
JavaScript (ES6),
8078 байтисточник
Pyth, 13 байт
демонстрация
Еще 13:
источник
APL (Дьялог) , 22 байта
Запрашивает матрицу, возвращает вложенную матрицу.
Попробуйте онлайн!
a←⎕
приглашение для матрицы и назначьте а⍴
размеры а (строки, столбцы)2×
умножить на два1+
добавить один⍴∘0 1¨
использовать каждый в г eshape (циклически) числа нулем и единицей{
…}/
Уменьшить, вставив следующую анонимную функцию между двумя числами:⍵\a
расширить * столбцы в соответствии с правильным аргументом⍺⍀a
расширить * строки этого согласно левому аргументу* 0 вставляет столбец / строку нулей, 1 вставляет исходный столбец данных / строку
источник
Java 8
183166162129 байтВвод и вывод в виде
int[][]
.-33 байт пути создания порта @auhmaan «s C # ответа .
Объяснение:
Попробуй это здесь.
источник
J , 24 байта
Попробуйте онлайн!
источник
05AB1E , 22 байта
Попробуйте онлайн!
На самом деле использует тот же кусок кода 2x, поэтому я могу сохранить его в виде строки и использовать Eval для -10 байт.
источник