Para cada fila y luego columna de una matriz, podemos agregar una entrada adicional con la suma de las dos últimas entradas en esa fila o columna. Por ejemplo con la siguiente matriz de entrada:
[ 1 1 1 ]
[ 2 3 4 ]
La matriz resultante sería:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Dada una entrada de un entero N y una matriz [X, Y] de tamaño de al menos 2x2, realice la expansión N veces anterior y genere el resultado. La matriz resultante siempre será de tamaño [X + N, Y + N].
Ejemplos:
Input: Output:
2, [ 0 0 ] [ 0 0 0 0 ]
[ 0 0 ] [ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
3, [ 1 1 1 ] [ 1 1 1 2 3 5 ]
[ 2 3 4 ] [ 2 3 4 7 11 18 ]
[ 3 4 5 9 14 23 ]
[ 5 7 9 16 25 41 ]
[ 8 11 14 25 39 64 ]
2N
tiempos que recorrer dosN
veces?2*
(notación postfix). Tal vez debería tener un carácter integrado, se usa con frecuencia. También2^
(cuadrado). Pero me estoy quedando sin espacio de código :-)J, 19 bytes
Esto define un adverbio, que toma el número a su izquierda y produce un verbo que toma la matriz a su derecha. Para el segundo ejemplo, da
Explicación
fuente
K, 23 bytes
En acción:
Probarlo aquí .
fuente
{x
y}
Jalea,
151312 bytes-1 byte por @Dennis
Al igual que la respuesta MATL de @ LuisMendo, esto transpone la matriz antes de hacer la transformación a lo largo de un eje. Por lo tanto, necesitamos llamar a la función 2 * n veces.
Probarlo aquí .
fuente
ES6, 134 bytes
Explicación:
fuente
Haskell, 67 bytes
Ejemplo de uso:
Cómo funciona:
fuente
sudo apt-get install haskell-platform
y estoy ejecutando elghci
REPL, que me da unPrelude>
aviso. Cuando pegoo%m=m++[o(+)(last m)$last$init m]
me sale<interactive>:2:4: parse error on input '='
. ¿Me puede dar un pequeño manual ya sea ejecutando esto desde un archivo fuente o en el REPL?o%m=...
línea (y solo esta línea) en un archivo llamado, digamosfib-matrix.hs
. Luego puede usar el:l fib-matrix.hs
comandoghci
para cargar las definiciones y llamar a la función principal tal como se describe en mi ejemplo de uso. - O usolet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
delante de la segunda línea:f=(!!).iterate...
guarde ambas líneas en un archivo y cárguelo a través del: <filename.hs>
. Entonces puedes llamarf [[1,1,1],[2,3,4]] 3
, etc.CJam,
1716 bytesEl formato de entrada es la matriz primero (como una matriz 2D de estilo CJam) y el número de iteraciones posteriores.
Pruébalo aquí.
Explicación
Resulta que esta es la misma solución que todos los demás:
fuente
En serio, 20 bytes
Toma entrada de la matriz (como una lista 2D), entonces
N
. Emite una lista 2D.Esta versión no funciona en el intérprete en línea por alguna razón, pero funciona con este compromiso previo al desafío .
Una versión que funciona en línea, para 23 bytes:
Toma entrada en el orden opuesto (
N
, luego matriz).Pruébalo en línea!
Agregaré una explicación después de dormir un poco. Trabajar con errores de intérprete nunca es divertido.
fuente
Pyth,
1312 bytesPruébalo en línea. Banco de pruebas.
Utiliza el mismo algoritmo para la mayoría de las respuestas. Toma como entrada la matriz como una matriz 2D en la primera línea y
n
en la segunda línea.Explicación
fuente
Matlab, 60 bytes
Primero estaba jugando con los elegantes métodos de indexación de Matlab (es decir,
A(end+1,:)=sum...
) antes de darme cuenta de que en este caso raro, la concatenación simple es realmente más barata en Matlab. Lástima que tuve que convertir esto en una función real. Debería funcionar con Octave también.Supongo que este es un excelente ejemplo de cómo no hacer algoritmos. Para A = 2x2, n = 1000, este algoritmo ya lleva 5 segundos en mi computadora portátil, n = 2000 ¡son casi 50 segundos! (o aproximadamente 30 s si A es un
gpuArray
agradecimiento a mi confiable Quadro 1000M)fuente
f([0,1;2,3],1000)
f.m
. 2) Comienceoctave
. 3) Pegarload f.m; f([1,1,1;2,3,4],3)
en el indicador REPL: funciona para mí.Java, 2179 bytes
Lo resolví: - Este código está en lenguaje Java.
fuente
{}
en en la parte superior del cuadro de edición; esto automáticamente hará este prefijo.Python, 103
105bytesLa función anónima toma la lista de la lista y pasa a la función recursiva
f
. La salida se transpone y luego se pasa def
nuevo, luego la salida de la segunda vuelta se vuelve a transponer. La salida es una lista de tuplasGuardado dos bytes gracias a bakuriu
fuente
n>0
podría ser simplementen
, ya que comienzas con un positivon
y cuando alcanzas0
su valor es falso.APL (Dyalog Classic) , 17 bytes
Pruébalo en línea!
fuente
Perl 6 ,
87 7371 bytesUso:
fuente
perl6
me da algunos errores . Soy un novato perl, ¿qué estoy haciendo mal?my &code = ->\c,\m{ … }
para dejar en claro que->\c,\m{ … }
es necesario reemplazarlo con el código anterior. Por lo general, uso parámetros de marcador de posición implícitos$_
o@_
explícitos$^a
porque tienden a ser más cortos. Simplemente no lo pensé. También asegúrese de estar usando una versión lo suficientemente nueva ($*PERL.compiler.version !before 2015.12
)m:
y un espacio) También puede enviar mensajes directamente a camelia