Gibt es in Golfscript eine Möglichkeit, alle Diagonalen eines Arrays in einem einzigen Array zusammenzufassen?
Zum Beispiel für das Array
[[1 2 3][4 5 6][7 8 9]]
Rückkehr
[[7][4 8][1 5 9][2 6][3]]
(nicht unbedingt in dieser Reihenfolge) und für
["ABCD""EFGH""IJKL"]
Rückkehr
["I""EJ""AFK""BGL""CH""D"]
(nicht unbedingt in dieser Reihenfolge). Angenommen, die Längen der Arrays sind gleich.
Ich habe Probleme damit, es herauszufinden. Ich habe versucht, etwas mit =
dem (length+1)
th-Zeichen der Saiten zu tun und es zu durchlaufen , aber das hat nicht funktioniert. Kann mir jemand helfen?
Ich würde gerne den kürzesten Weg dazu finden, wenn möglich.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
quelle
quelle
Antworten:
Erwägen
Um die Hauptdiagonale und die darüber liegenden Diagonalen zu erhalten, können wir das erste Zeichen der zweiten Reihe und die ersten beiden der dritten Reihe verschieben:
Beachten Sie, dass alle Spalten einer Diagonale entsprechen. Wenn Sie also das Array "zippen" (dh Zeilen und Spalten transponieren), erhalten Sie ein Array mit den oben genannten vier Diagonalen:
Wir vermissen immer noch die Diagonalen unterhalb der Hauptdiagonale.
Wenn wir A selbst komprimieren und den obigen Vorgang wiederholen, erhalten wir ein Array, das die Hauptdiagonale und alle darunter liegenden Diagonalen enthält . Alles, was übrig bleibt, um die Mengenvereinigung beider Arrays zu berechnen.
Alles zusammen:
Probieren Sie es online aus.
Wenn wir nur die Diagonalen benötigen, weil wir nach einer Zeichenfolge in ihnen suchen (wie im Wortsuchrätsel , von dem ich annehme , dass es diese Frage inspiriert hat), ist möglicherweise auch ein "weniger sauberer" Ansatz geeignet.
Sie können verwenden
um alle Diagonalen sowie einige unnötige Zeilenvorschubzeichen zu erhalten.
Ich habe den Prozess in dieser Antwort ausführlich erklärt .
Probieren Sie es online aus.
quelle