Existe-t-il un moyen dans Golfscript de rassembler toutes les diagonales d'un tableau dans un seul tableau?
Par exemple, pour le tableau
[[1 2 3][4 5 6][7 8 9]]
revenir
[[7][4 8][1 5 9][2 6][3]]
(pas nécessairement dans cet ordre) et pour
["ABCD""EFGH""IJKL"]
revenir
["I""EJ""AFK""BGL""CH""D"]
(Pas nécessairement dans cet ordre). Supposons que les longueurs des tableaux soient identiques.
J'ai du mal à le comprendre. J'ai essayé de faire quelque chose avec =
et d'itérer le (length+1)
caractère des cordes, mais cela n'a pas fonctionné. Est-ce que quelqu'un peut m'aider?
J'aimerais la manière la plus courte de le faire, si possible.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
la source
la source
Réponses:
Considérer
Pour obtenir la diagonale principale et les diagonales au-dessus, nous pouvons décaler le premier caractère de la deuxième ligne et les deux premiers de la troisième:
Notez que toutes les colonnes correspondent à une diagonale, donc "zipper" le tableau (c'est-à-dire transposer des lignes et des colonnes) produira un tableau contenant les quatre diagonales susmentionnées:
Il nous manque encore les diagonales sous la diagonale principale.
Si nous compressons A lui-même et répétons le processus ci-dessus, nous obtiendrons un tableau contenant la diagonale principale et toutes les diagonales en dessous . Tout ce qui reste pour calculer l'union définie des deux tableaux.
Mettre tous ensemble:
Essayez-le en ligne.
Enfin, si nous n'avons besoin que des diagonales parce que nous recherchons une chaîne à l'intérieur (comme dans le casse - tête de recherche de mots , qui, je suppose, a inspiré cette question), une approche "moins propre" pourrait également convenir.
Vous pouvez utiliser
pour obtenir toutes les diagonales, plus quelques caractères de saut de ligne inutiles.
J'ai expliqué le processus en détail dans cette réponse .
Essayez-le en ligne.
la source