De esta pregunta de stackoverflow
Dada una matriz 2D de tamaño , genera los valores en sentido antihorario. La salida debe comenzar desde afuera hacia adentro y el punto inicial siempre será .
Ejemplo dado:
Los valores de borde en sentido antihorario son entonces .
Ahora repetimos el proceso para los valores internos. Esto terminará con una matriz como la siguiente
Y los valores internos son entonces
El resultado final será
Reglas
- Asumir entrada no vacía
- Asumir valores de matriz como enteros positivos
- Se aplican los métodos estándar de E / S
- Se aplican las reglas estándar de código de golf y los criterios ganadores
Algunos casos de prueba
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Respuestas:
R , 54 bytes
Varios bytes guardados por @Giuseppe y @ J.Doe.
Pruébalo en línea!
Retire recursivamente la primera columna y revierta / transponga la fila (haciendo que la fila inferior sea la nueva primera columna) el resto de la matriz hasta que termine con una sola columna. Versión "tradicional" sin golf:
Se señaló que se
ncol(m)
podría aprovechar parasum(m)
guardar otro byte porque se nos permite asumir valores de matriz enteros positivos. Pero lo dejaré así, ya que funciona para todas las matrices (¡incluso las matrices de cadenas!)fuente
t()
evita que eldrop=TRUE
valor predeterminado`[`
arruine laif
condición!t()
no tener que usar unais.null
prueba que estaba en mis intentos originales.m
será el último nulo de todos modos, por lo que puede cambiar la instrucción if por 54 bytes ? Parece funcionar para los casos de prueba.Python 2 , 52 bytes
Pruébalo en línea!
fuente
Pyth , 9 bytes
Pruébalo aquí!
¿Cómo?
fuente
Stax , 7 bytes
Ejecutar y depurarlo
Toma una matriz de filas en una línea y produce una salida separada por una nueva línea.
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Pyth, 20 bytes
Pruébalo aquí
Explicación
fuente
ok , 12 bytes
Pruébalo en línea!
Esto abusa del hecho de que a oK no parece importarle demasiado la forma para la transposición. En k esto sería 13 bytes :
*:',/(1_+|:)\
.fuente
Limpio , 69 bytes
Pruébalo en línea!
Mueve la siguiente fila / columna al encabezado de la lista para que pueda coincidir con el patrón en el argumento.
Para el primer ejemplo en el desafío, esto se ve así:
fuente
Julia 0.7 , 47 bytes
Pruébalo en línea!
Julia tiene un conveniente incorporado para rotar la matriz 90 grados, eliminando la necesidad de operaciones de transposición-reversa.
Como puede ver en las advertencias del compilador, insiste en que todos los componentes del condicional ternario deben estar separados por espacios, y en la versión 1.0 esto se ha aplicado realmente.
Curiosamente, en esta situación, la forma más corta que encontré para salir de la recursión fue usar un bloque try-catch:
Julia 1.0 , 50 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 89 bytes
Pruébalo en línea!
Toma la primera columna, transpone la restante y luego invierte cada fila (= gira la matriz 90 grados CW), y luego repite hasta que la matriz no tenga más entradas.
fuente
APL (Dyalog) ,
2422 bytesPruébalo en línea!
¿Cómo?
fuente
05AB1E ,
131110 bytes-2 bytes gracias a @Emigna .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Jalea , 9 bytes
Pruébalo en línea!
fuente
Carbón de leña , 25 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Gire la entrada 180 °. Esto se debe a dos razones: a) la última fila es la más fácil de eliminar yb) es más fácil hacer un bucle si la fila se elimina al final del bucle. (Intenté reflexionar y mostrar en sentido horario, pero eso tomó un byte adicional).
Repita hasta que la matriz esté vacía.
Gire la matriz 90 °.
Elimine la última fila de la matriz e imprima el elemento como cadenas en líneas separadas.
fuente
Ruby , 65 bytes
Pruébalo en línea!
fuente
PowerShell , 266 bytes
Sí ... PowerShell no es el mejor para manejar matrices. Pero, el algoritmo es básicamente el mismo que el anterior. Cada fila se representa como una cadena separada por comas, y básicamente hacemos una rotación y transposición para cada capa. Es probable que pueda afeito más fuera, pero ... yo estoy ya en pijama ...
Pruébalo en línea!
fuente