Fondo
En los lenguajes de programación más razonables, es muy fácil rotar las filas o columnas de una matriz 2D. En este desafío, su tarea es rotar los antiagoniales en su lugar. Recuerde que las antiagoniales de una matriz 2D son sus cortes 1D tomados en la dirección noreste ↗.
Entrada
Una matriz 2D rectangular no vacía de números de un solo dígito en cualquier formato razonable. Tenga en cuenta que la matriz puede no ser un cuadrado.
Salida
La misma matriz, pero con cada anti-diagonal girado un paso hacia la derecha.
Ejemplo
Considere la 3x4
matriz de entrada
0 1 2 3
4 5 6 7
8 9 0 1
Los anti-diagonales de esta matriz son
0
4 1
8 5 2
9 6 3
0 7
1
Sus versiones rotadas son
0
1 4
2 8 5
3 9 6
7 0
1
Por lo tanto, la salida correcta es
0 4 5 6
1 8 9 0
2 3 7 1
Reglas y puntaje
Puede escribir un programa completo o una función. También es aceptable escribir una función que modifique la matriz de entrada en su lugar, si su idioma lo permite. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos, o desea enumerar las penalizaciones de la bandera del intérprete por separado, o desea mostrar los puntajes antiguos que mejoró), asegúrese de que el puntaje real es el último número en el encabezado.
Casos de prueba adicionales
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 bytesPruébalo aquí.
Hmm, mucho mejor que mi primer intento, pero tengo la sensación de que Dennis resolverá esto en mucho menos de todos modos ...
La entrada y la salida son como cuadrículas ASCII:
da
fuente
J, 24 char
Función tomando un argumento.
J tiene un operador
/.
llamado oblicuo . No puede invertirlo, por lo que la reconstrucción no es trivial, pero puede considerar "enumerar oblicuos" como una permutación de los elementos de la matriz. Así que invertido que permutación con/:
(diádica Ordenar ), poniendo la permutación "oblicuos" para ese tamaño (</.@i.@$
) en el nuestros nuevos valores oblicuas derecha y, girar adecuadamente, a la izquierda. Luego volvemos a dar forma a esta lista en la antigua matriz rectangular utilizando la antigua$$
.Pruébalo en línea.
fuente
J,
3830 bytes8 bytes guardados gracias a @algorithmshark.
La función recopila los bordes superior e izquierdo en una lista, corta la lista a dos piezas de tamaños suficientes y las une a la derecha y al final de la parte central.
Uso:
Pruébelo en línea aquí.
fuente
{./.
sustituye}:@{.,{:"1
, y se puede guardar dos tildes moviendo el tren por:{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 bytesEsto crea una función sin nombre que acepta una matriz y devuelve la matriz de entrada modificada en su lugar.
Sin golf:
¡Gracias a Martin Büttner por el asesoramiento algorítmico y por guardar 4 bytes!
fuente
ES6, 75 bytes
Esto acepta una matriz de matrices como parámetro y la modifica en su lugar.
Sin golf:
Consulte el diagrama de @aditsu para obtener más aclaraciones.
fuente
{t.push(r.pop());r.unshift(t.shift())}
at.push(r.pop())+r.unshift(t.shift())
Pyth, 20 bytes
Utiliza el enfoque de Adistu de eliminar la fila superior y la columna derecha, luego pegarlas en la izquierda y en la parte inferior. Pero con estructuras de datos mutables, no transposiciones.
fuente
Octava, 85 bytes
Espero poder deshacerme del
end
s.fuente
Python 2 ,
11310494 bytesPruébalo en línea!
Esta es una interpretación bastante literal del método de @ aditsu. La sintaxis de Python para tratar listas vacías como False ayudó a ahorrar 10 bytes adicionales.
fuente
0
en[0:1]