A partir desta pergunta stackoverflow
Dada uma matriz 2D do tamanho , produza os valores no sentido anti-horário. A saída deve começar de fora para dentro e o ponto inicial sempre será .
Exemplo dado:
Os valores das arestas no sentido anti-horário são então .
Agora repetimos o processo para os valores internos. Isso terminará com uma matriz como a seguinte
E os valores internos são então
O resultado final será então
Regras
- Assumir entrada não vazia
- Assuma valores de matriz como números inteiros positivos
- Aplicam-se métodos de E / S padrão
- Aplicam -se as regras padrão de código de golfe e os critérios de vencimento
Alguns casos de teste
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
Respostas:
R , 54 bytes
Vários bytes salvos por @ Giuseppe e @ J.Doe.
Experimente online!
Retire recursivamente a primeira coluna e faça a reversão / transposição de linha (tornando a linha inferior a nova primeira coluna) o restante da matriz até você terminar com apenas uma coluna. Versão "tradicional" não destruída:
Foi apontado que
ncol(m)
poderia ser jogado parasum(m)
salvar outro byte, porque podemos assumir valores positivos da matriz inteira. Mas vou deixar assim, pois funciona para todas as matrizes (mesmo matrizes de strings!)fonte
t()
impede odrop=TRUE
padrão`[`
de estragar aif
condição!t()
não ter que usar umis.null
teste que estava nas minhas tentativas originais.m
não será nula de qualquer maneira, para que você possa alterar a instrução if para 54 bytes . Parece funcionar para os casos de teste.Python 2 , 52 bytes
Experimente online!
fonte
Pitão , 9 bytes
Experimente aqui!
Quão?
fonte
Stax , 7 bytes
Execute e depure
Ele pega uma matriz de linhas em uma linha e produz saída separada por nova linha.
Descompactado, não jogado e comentado, é assim.
Execute este
fonte
Pitão, 20 bytes
Experimente aqui
Explicação
fonte
OK , 12 bytes
Experimente online!
Isso abusa do fato de que oK parece não se importar muito com a forma da transposição. Em k isso seria 13 bytes :
*:',/(1_+|:)\
.fonte
Limpo , 69 bytes
Experimente online!
Move a próxima linha / coluna para o início da lista, para que possa corresponder ao padrão no argumento.
Para o primeiro exemplo do desafio, isso se parece com:
fonte
Julia 0,7 , 47 bytes
Experimente online!
Julia tem um conveniente embutido para girar a matriz em 90 graus, eliminando a necessidade de operações de transposição reversa.
Como você pode ver nos avisos do compilador, ele insiste em que todos os componentes da condicional ternária devem ser separados por espaços, e na v. 1.0 isso foi realmente aplicado.
Curiosamente, nessa situação, a maneira mais curta que encontrei para sair da recursão foi usar um bloco try-catch:
Julia 1.0 , 50 bytes
Experimente online!
fonte
JavaScript (Node.js) , 89 bytes
Experimente online!
Pega a primeira coluna, transpõe a restante e inverte cada linha (= gire a matriz 90 graus CW) e repita até que a matriz não tenha mais entradas.
fonte
APL (Dyalog) ,
2422 bytesExperimente online!
Quão?
fonte
05AB1E ,
131110 bytes-2 bytes graças a @Emigna .
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Geléia , 9 bytes
Experimente online!
fonte
Carvão , 25 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Gire a entrada em 180 °. Isso ocorre por dois motivos: a) a última linha é a mais fácil de remover eb) é mais fácil fazer um loop se a linha for removida no final do loop. (Tentei refletir e produzir no sentido horário, mas isso exigiu um byte extra.)
Repita até que a matriz esteja vazia.
Gire a matriz em 90 °.
Remova a última linha da matriz e imprima o elemento como seqüências de caracteres em linhas separadas.
fonte
Ruby , 65 bytes
Experimente online!
fonte
PowerShell , 266 bytes
Sim. O PowerShell não é o melhor para lidar com matrizes. Mas, o algoritmo é basicamente o mesmo que o acima. Cada linha é representada como uma sequência separada por vírgula, e basicamente fazemos uma rotação e transposição para cada camada. Eu provavelmente pode raspar mais fora, mas ... Eu sou já de pijama ...
Experimente online!
fonte