Tome una matriz no anidada como entrada. Conviértalo en una matriz utilizando el siguiente método:
Digamos que mi matriz es [1, 2, 3, 4, 5]
Primero, repito esa matriz 5 veces: (la longitud)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Entonces, lo leí a lo largo de las diagonales:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
Aplané esta matriz y la dividí en cinco (la longitud):
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
Este es el código de golf. Pocos bytes ganan.
Respuestas:
05AB1E, 13 bytes
Pruébalo en línea!
Explicación:
fuente
Jalea , 11 bytes
Pruébalo en línea!
Explicación
fuente
L
él, hice cosas raras, por lo tanto, utilicé el registro: / Simplemente lo intenté de nuevo y funciona ... básicamente lo mismo, así que supongo que simplemente eliminaré el mío.Python 2,
10596 bytes-1 y -4 y -4 bytes gracias a Flp.Tkc
El bucle for agrega los elementos como en la descripción, la magia real ocurre en el zip que es desde aquí
fuente
JavaScript (ES6) 100
101 105Menos golf
Prueba
fuente
return
. Debería publicar un consejo sobre eso en el hilo de consejos ES6.eval
es mejor incluso esta vez :(MATL , 17 bytes
Pruébalo en línea!
Cómo funciona
La siguiente explicación utiliza la entrada
[1 2 3 4 5]
como ejemplo. Para visualizar los resultados intermedios, inserte%
(símbolo de comentario) después de cualquier declaración en el código.Tenga en cuenta que
;
es el separador de filas para matrices. Entonces,[1 2]
es un vector de fila,[1; 2]
es un vector de columna y[1 0; 0 1]
es la matriz de identidad 2 × 2.fuente
JavaScript (ES6), 116 bytes
Bueno, es un comienzo ...
fuente
R, 84 bytes
Lee la entrada de stdin y produce / devuelve una matriz R.
Explicado
El aspecto más interesante de esta respuesta es cómo se recuperan las diagonales. En general, un objeto se puede dividir usando la
split
función si se le proporciona un objeto que contiene factores en los que se divide el objeto. Para crear estos factores podemos usarcol
yrow
que devuelven una matriz que contiene los índices de columna y fila respectivamente. Al tomar las diferencias:row(m)-col(m)
obtenemos una matriz como:en el que cada diagonal se identifica de forma única. Ahora podemos dividirnos en base a esta matriz y convertirla en una lista irregular aplicando
split
:(Observe cómo el nombre de cada vector corresponde a los valores diagonales en la matriz anterior).
El último paso es simplemente aplanar y convertirlo en una matriz de la forma:
fuente
Mathematica 93 Bytes
Así es como normalmente escribiría este código (109 Bytes):
Este diagrama matricial da una buena idea de la estructura debido a un vector de entrada secuencialmente creciente.
Aquí está la gráfica de matriz con un vector de entrada aleatorio. Obviamente, todavía existe alguna estructura.
fuente
Mathematica, 92 bytes
Función sin nombre que toma una lista como argumento. Puede haber otras estructuras para tal función, pero espero haber jugado bastante bien esta estructura ...
La primera parte
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
define una funciónn
de dos argumentos: la primera es una lista de longitudl
y la segunda es una función para aplicar a las listas.n
aplica losl-1
tiempos de esa función a la lista de argumentos invertidos, guardando todos los resultados en su lista de salida. (Definirr
yl
en el camino es solo jugar al golf).n
se llama dos veces en la lista original, una vez con la funciónRest
(descartar el primer elemento de la lista) y una vez con la función serMost
(descartar el último elemento). Esto produce todas las sublistas deseadas, pero la lista completa está allí dos veces (de ahí la extraMost
) y la primera mitad está en orden inverso (de ahí lar[...]
). Finalmente,~ArrayReshape~{l,l}
olvida la estructura de la lista actual y la obliga a ser una matrizl
xl
.fuente
Mathematica, 85 bytes
Realizando literalmente los pasos sugeridos:
Mi instinto dice que debería haber una forma inteligente de usar
Part
para hacer esto más corto, pero cada intento que hice fue más largo que 85 bytes.fuente
Rubí (110 bytes)
los
sort
posible que la operación no sea necesaria, pero el documento para Enumerable # group_by no garantiza el orden de los valores en los valores hash (que son matrices), pero las versiones actuales de Ruby proporcionan el orden que uno esperaría y el orden que necesitaría sisort
fuera eliminado de mi código.Los pasos son los siguientes.
Por último,
f.to_a
devuelve la matriz mostrada anteriormente.fuente