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
}
Ligue para:
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];
Saída:
No espírito do desafio:
Geléia ,
1211 bytes-1 byte graças a Erik, o Outgolfer (não é necessário usar argumentos trocados para uma junção)
Experimente online! Ou veja uma suíte de testes .
Um link monádico que aceita e retorna listas de listas.
Quão?
fonte
j00,0jµ€Z$⁺
Haskell , 38 bytes
Experimente online!
fonte
MATL , 12 bytes
Entrada é uma matriz com
;
separador de linha.Experimente online!
Explicação
fonte
Japonês , 18 bytes
Teste online! (Usa o
-Q
sinalizador para facilitar a compreensão da saída.)Semelhante à resposta Jelly, mas muito mais tempo ...
Explicação
A parte externa do código é apenas uma solução alternativa para simular o Jelly's
⁺
:O código em si é:
Repetido duas vezes, esse processo fornece a saída desejada. O resultado é impresso implicitamente.
fonte
Casca , 12 bytes
Pega e retorna uma matriz inteira 2D. Experimente online!
Explicação
Mesma idéia que em muitas outras respostas: adicione zeros a cada linha e transponha duas vezes. A operação de linha é implementada com uma dobra.
fonte
Mathematica, 39 bytes
Experimente na sandbox Wolfram! Chame como "
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
".Como muitas outras respostas, isso funciona transpondo e zerando zeros em cada linha e fazendo a mesma coisa novamente. Inspirado na resposta de Jonathan Allan Jelly especificamente, mas apenas porque eu vi essa resposta primeiro.
fonte
Dyalog APL, 24 bytes
4 bytes salvos graças a @ZacharyT
5 bytes salvos graças a @KritixiLithos
Experimente online!
fonte
1,1,⍴⍵
, não é?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
1 1+
!1+
funcionaria?Oitava, 41 bytes
Experimente online!
fonte
Python 3 ,
104 101 97 9386 bytesw
removida e um espaço indesejado[a,b]
apenasa,b
ao anexar a uma listaExperimente online!
fonte
w
e salvar 2 bytes: repl.it/JBPEm+=[r,w]
[j,0]
paraj,0
e[r,m[0]
parar,m[0]
?for
indentação do loop em uma única guia.Python 3, 118 bytes
Golfe pela primeira vez! Não é o melhor, mas tenho muito orgulho se posso dizer isso por mim mesmo!
fonte
+=
e=
estão cercados por espaços, que podem ser removidos. Além disso, fazer+=
duas vezes seguidas pode ser simplificado em uma única instrução, por exemploe+=str(d)+'0'
for
loop interno em uma única linhafor d in c:e+=str(d)+'0'
, mas convém ir com um mapa de junção (str, d)) + '0', in which case it becomes pointless to define
e`.z
er
na mesma linha (com um;
entre eles), salvando um byte de recuo.R, 65 bytes
Obrigado a Jarko Dubbeldam e Giuseppe pelos comentários muito valiosos!
Código
A entrada para a função deve ser uma matriz ou matriz bidimensional.
Teste
Saída
fonte
a=dim(x)*2+1
em vez denrow
encol
seria melhor. Você poderia então fazery=matrix(0);dim(y)=a
e2*1:a[1],2*1:a[2]
.y=array(0,a)
seria ainda mais curto.2*1:a[1]
porque:
tem maior precedência do que*
Mathematica, 55 bytes
fonte
o={0,0}
pode ser reduzido parao=0{,}
PHP , 98 bytes
Entrada como matriz 2D, Saída como sequência
Experimente online!
PHP , 116 bytes
Entrada e Saída como matriz 2D
Experimente online!
fonte
Clojure, 91 bytes
Repete os intervalos em meias etapas.
fonte
Perl 6 , 33 bytes
Experimente online!
fonte
Python 2 , 64 bytes
Experimente online!
A função
g
intercala a entrada entre zeros. A função principal transpõe a entrada durante a aplicaçãog
e o faz novamente. Talvez haja uma maneira de evitar a repetição na função principal.fonte
JavaScript (ES6),
7372 bytesFormatado e comentado
Inserir zeros na horizontal e na vertical são operações muito semelhantes. A idéia aqui é usar a mesma função g () para ambas as etapas.
Casos de teste
Mostrar snippet de código
fonte
Carvão , 49 bytes
Experimente online!
The input is a single string separating the rows with a semicolon.
fonte
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
but even avoiding StringMap I still think this can be done in 27 bytes.C++17 + Modules, 192 bytes
Input as rows of strings from cin, Output to cout
fonte
C#, 146 bytes
Data
Int32[,]
m
The matrix to be explodedInt32[,]
The exploded matrixGolfed
Ungolfed
Ungolfed readable
Full code
Releases
146 bytes
- Initial solution.Notes
fonte
(int[,] m)=>
, justm=>
is enough if you statem
is a 2D int-array int your answer. Also, you can change,x,
to,x=0,
and get rid of thex=0
in the for-loop initialization for -1 byte. And you can removey++
from the inner loop by changing=m[x,y];
to=m[x,y++];
for an additional -1 byte. But +1 from me, and if I create a port of your answer it's also shorter than my current Java answer. :)Dyalog APL, 24 bytes
Any improvements are welcome and wanted!
fonte
Python 2, 92 bytes
Try it online!
fonte
Python 3 + Numpy, 87 bytes
Try it online!
fonte
JavaScript (ES6),
8078 bytesfonte
Pyth, 13 bytes
Demonstration
Another 13:
fonte
APL (Dyalog), 22 bytes
Prompts for matrix, returns enclosed matrix.
Try it online!
a←⎕
prompt for matrix and assign to a⍴
the dimensions of a (rows, columns)2×
multiply by two1+
add one⍴∘0 1¨
use each to reshape (cyclically) the numbers zero and one{
…}/
reduce by inserting the following anonymous function between the two numbers:⍵\a
expand* the columns of a according to the right argument⍺⍀a
expand* the rows of that according to the left argument* 0 inserts a column/row of zeros, 1 inserts an original data column/row
fonte
Java 8,
183166162129 bytesInput and output as a
int[][]
.-33 bytes by creating a port of @auhmaan's C# answer.
Explanation:
Try it here.
fonte
J, 24 bytes
Try it online!
fonte
05AB1E, 22 bytes
Try it online!
Actually uses the same piece of code 2x, so I can store it as a string and use Eval for -10 bytes.
fonte