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}
Sin golf:
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
}
Llamar con:
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];
Salida:
En el espíritu del desafío:
Jalea ,
1211 bytes-1 byte gracias a Erik the Outgolfer (no es necesario usar argumentos intercambiados para una unión)
Pruébalo en línea! O ver un conjunto de pruebas .
Un enlace monádico que acepta y devuelve listas de listas.
¿Cómo?
fuente
j00,0jµ€Z$⁺
Haskell , 38 bytes
Pruébalo en línea!
fuente
MATL , 12 bytes
La entrada es una matriz con un
;
separador de filas.Pruébalo en línea!
Explicación
fuente
Japt , 18 bytes
¡Pruébalo en línea! (Utiliza el
-Q
indicador para que la salida sea más fácil de entender).Similar a la respuesta de Jelly, pero mucho más ...
Explicación
La parte externa del código es solo una solución alternativa para simular Jelly's
⁺
:El código en sí es:
Repetido dos veces, este proceso da el resultado deseado. El resultado se imprime implícitamente.
fuente
Casco , 12 bytes
Toma y devuelve una matriz de enteros 2D. Pruébalo en línea!
Explicación
La misma idea que en muchas otras respuestas: agregue ceros a cada fila y transponga, dos veces. La operación de fila se implementa con un pliegue.
fuente
Mathematica, 39 bytes
¡Pruébalo en el sandbox de Wolfram! Llámalo como "
r=Riffle[#,0,{1,-1,2}]&/@Thread@#&;r@*r@{{1,2},{3,4}}
".Al igual que muchas otras respuestas, esto funciona mediante la transposición y el riffing de ceros en cada fila y luego haciendo lo mismo nuevamente. Inspirado por la respuesta Jelly de Jonathan Allan específicamente, pero solo porque vi esa respuesta primero.
fuente
Dyalog APL, 24 bytes
4 bytes guardados gracias a @ZacharyT
5 bytes guardados gracias a @KritixiLithos
Pruébalo en línea!
fuente
1,1,⍴⍵
, ¿verdad?{{⍵↑⍨-1 1+⍴⍵}⊃⍪/,/2 2∘↑¨⍵}
a los 26 años1 1+
!1+
funcionaría?Octava, 41 bytes
Pruébalo en línea!
fuente
Python 3 ,
104101 97 9386 bytesw
eliminó la y un espacio no deseado[a,b]
como soloa,b
agregar a una listaPruébalo en línea!
fuente
w
y guardar 2 bytes: repl.it/JBPEm+=[r,w]
[j,0]
aj,0
y[r,m[0]
parar,m[0]
?for
sangría del bucle a una sola pestaña.Python 3, 118 bytes
Primera vez jugando al golf! No es el mejor, ¡pero estoy muy orgulloso si puedo decirlo yo mismo!
fuente
+=
y=
están rodeados de espacios, que se pueden eliminar. Además, hacer+=
dos veces seguidas podría simplificarse en una sola declaración, por ejemploe+=str(d)+'0'
for
bucle interno en una sola líneafor d in c:e+=str(d)+'0'
, pero es posible que desee ir con un mapa de unión (str, d)) + '0', in which case it becomes pointless to define
e` en absoluto.z
yr
en la misma línea (con una;
entre ellas), guardando un byte de sangría.R, 65 bytes
¡Gracias a Jarko Dubbeldam y Giuseppe por sus valiosos comentarios!
Código
La entrada para la función debe ser una matriz o matriz bidimensional.
Prueba
Salida
fuente
a=dim(x)*2+1
lugar denrow
yncol
sería mejor. Entonces podrías hacery=matrix(0);dim(y)=a
y2*1:a[1],2*1:a[2]
.y=array(0,a)
sería aún más corto.2*1:a[1]
porque:
tiene mayor prioridad que*
Mathematica, 55 bytes
fuente
o={0,0}
puede reducirse ao=0{,}
PHP , 98 bytes
Entrada como matriz 2D, salida como cadena
Pruébalo en línea!
PHP , 116 bytes
Entrada y salida como matriz 2D
Pruébalo en línea!
fuente
Clojure, 91 bytes
Itera sobre rangos en medios pasos.
fuente
Perl 6 , 33 bytes
Pruébalo en línea!
fuente
Python 2 , 64 bytes
Pruébalo en línea!
La función
g
intercala la entrada entre ceros. La función principal transpone la entrada mientras se aplicag
, luego lo vuelve a hacer. Tal vez hay una manera de evitar la repetición en la función principal.fuente
JavaScript (ES6),
7372 bytesFormateado y comentado
Insertar ceros horizontal y verticalmente son operaciones muy similares. La idea aquí es usar la misma función g () para ambos pasos.
Casos de prueba
Mostrar fragmento de código
fuente
Carbón , 49 bytes
Pruébalo en línea!
La entrada es una sola cadena que separa las filas con un punto y coma.
fuente
≔E⪪θ;⪫00⪫ι0θFθ⟦⭆ι0ι⟧⭆⊟θ0
pero incluso evitando StringMap, sigo pensando que esto se puede hacer en 27 bytes.Módulos C ++ 17 +, 192 bytes
Entrada como filas de cadenas de cin , Salida a cout
fuente
C # , 146 bytes
Datos
Int32[,]
m
La matriz a explotarInt32[,]
La matriz explotadaGolfed
Sin golf
Legible sin golf
Código completo
Lanzamientos
146 bytes
- Solución inicial.Notas
fuente
(int[,] m)=>
, solom=>
es suficiente si declara quem
es una matriz int 2D en su respuesta. Además, se puede cambiar,x,
a,x=0,
y deshacerse de lax=0
en la inicialización de bucle de -1 bytes. Y puede eliminary++
del bucle interno cambiando=m[x,y];
a=m[x,y++];
un byte -1 adicional. Pero hago +1 por mí, y si creo un puerto de su respuesta, también es más corto que mi respuesta Java actual. :)Dyalog APL, 24 bytes
¡Cualquier mejora es bienvenida y deseada!
fuente
Python 2 , 92 bytes
Pruébalo en línea!
fuente
Python 3 + Numpy , 87 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
8078 bytesfuente
Pyth, 13 bytes
Demostración
Otros 13:
fuente
APL (Dyalog) , 22 bytes
Solicita matriz, devuelve matriz cerrada.
Pruébalo en línea!
a←⎕
solicitar matriz y asignar a un⍴
las dimensiones de a (filas, columnas)2×
multiplicar por dos1+
Agrega uno⍴∘0 1¨
utilizar cada uno de r eshape (cíclicamente) los números cero y uno{
…}/
Reduzca insertando la siguiente función anónima entre los dos números:⍵\a
expandir * las columnas de a de acuerdo con el argumento correcto⍺⍀a
expandir * las filas de eso de acuerdo con el argumento izquierdo* 0 inserta una columna / fila de ceros, 1 inserta una columna / fila de datos original
fuente
Java 8,
183166162129 bytesEntrada y salida como a
int[][]
.-33 bytes creando un puerto de la respuesta C # de @auhmaan .
Explicación:
Pruébalo aquí.
fuente
J , 24 bytes
Pruébalo en línea!
fuente
05AB1E , 22 bytes
Pruébalo en línea!
En realidad usa el mismo fragmento de código 2x, así que puedo almacenarlo como una cadena y usar Eval para -10 bytes.
fuente