Existe uma maneira no Golfscript de trazer todas as diagonais de uma matriz em uma única matriz?
Por exemplo, para a matriz
[[1 2 3][4 5 6][7 8 9]]
Retorna
[[7][4 8][1 5 9][2 6][3]]
(não necessariamente nessa ordem) e para
["ABCD""EFGH""IJKL"]
Retorna
["I""EJ""AFK""BGL""CH""D"]
(Não necessariamente nesta ordem). Suponha que os comprimentos das matrizes sejam os mesmos.
Estou lutando para descobrir isso. Eu tentei fazer algo com =
e iterando o (length+1)
caráter th das strings, mas isso não funcionou. Alguém pode me ajudar?
Gostaria da maneira mais curta de fazer isso, se possível.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
fonte
fonte
Respostas:
Considerar
Para obter a diagonal principal e as diagonais acima dela, podemos mudar o primeiro caractere da segunda linha e os dois primeiros da terceira:
Observe que todas as colunas correspondem a uma diagonal; portanto, "compactando" a matriz (isto é, transpondo linhas e colunas) produzirá uma matriz contendo as quatro diagonais mencionadas acima:
Ainda faltam as diagonais abaixo da diagonal principal.
Se fizermos o zip de A e repetirmos o processo acima, obteremos uma matriz contendo a diagonal principal e todas as diagonais abaixo dela. Tudo o que resta para calcular a união definida de ambas as matrizes.
Juntando tudo:
Experimente online.
Por fim, se precisarmos apenas das diagonais porque estamos procurando uma string dentro delas (como no quebra-cabeça do Word Search , que suponho ter inspirado essa pergunta), uma abordagem "menos limpa" também pode ser adequada.
Você pode usar
para obter todas as diagonais, além de alguns caracteres desnecessários de avanço de linha.
Expliquei o processo em detalhes nesta resposta .
Experimente online.
fonte