¿Hay alguna forma en Golfscript para reunir todas las diagonales de una matriz en una sola matriz?
Por ejemplo, para la matriz
[[1 2 3][4 5 6][7 8 9]]
regreso
[[7][4 8][1 5 9][2 6][3]]
(no necesariamente en ese orden) y para
["ABCD""EFGH""IJKL"]
regreso
["I""EJ""AFK""BGL""CH""D"]
(No necesariamente en ese orden). Suponga que las longitudes de las matrices son las mismas.
Estoy luchando para resolverlo. Intenté hacer algo =
e iterar a través del (length+1)
carácter th de las cadenas, pero eso no funcionó. ¿Alguien me puede ayudar?
Me gustaría la forma más corta de hacer esto, si es posible.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
fuente
fuente
Respuestas:
Considerar
Para obtener la diagonal principal y las diagonales por encima, podemos desplazar el primer carácter de la segunda fila y los dos primeros de la tercera:
Tenga en cuenta que todas las columnas corresponden a una diagonal, por lo que "comprimir" la matriz (es decir, transponer filas y columnas) producirá una matriz que contiene las cuatro diagonales mencionadas anteriormente:
Todavía nos faltan las diagonales debajo de la diagonal principal.
Si comprimimos A y repetimos el proceso anterior, obtendremos una matriz que contiene la diagonal principal y todas las diagonales debajo de ella. Todo lo que queda para calcular la unión establecida de ambas matrices.
Poniendolo todo junto:
Pruébalo en línea.
Finalmente, si solo necesitamos las diagonales porque estamos buscando una cadena dentro de ellas (como en el Word Search Puzzle , que supongo que inspiró esta pregunta), un enfoque "menos limpio" también podría ser adecuado.
Puedes usar
para obtener todas las diagonales, además de algunos caracteres innecesarios de salto de línea.
He explicado el proceso en detalle en esta respuesta .
Pruébalo en línea.
fuente