Czy w Golfscript jest sposób na połączenie wszystkich przekątnych tablicy w jedną tablicę?
Na przykład dla tablicy
[[1 2 3][4 5 6][7 8 9]]
powrót
[[7][4 8][1 5 9][2 6][3]]
(niekoniecznie w tej kolejności) i dla
["ABCD""EFGH""IJKL"]
powrót
["I""EJ""AFK""BGL""CH""D"]
(niekoniecznie w tej kolejności). Załóżmy, że długości tablic są takie same.
Mam trudności z rozgryzieniem tego. Próbowałem coś zrobić z =
iteracją (length+1)
ciągów znaków, ale to nie zadziałało. Czy ktoś może mi pomóc?
Jeśli to możliwe, chciałbym to zrobić najkrótszym sposobem.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
źródło
źródło
Odpowiedzi:
Rozważać
Aby uzyskać główną przekątną i przekątne nad nią, możemy przesunąć pierwszy znak drugiego rzędu i pierwsze dwa trzeciego:
Zauważ, że wszystkie kolumny odpowiadają przekątnej, więc „skompresowanie” tablicy (tj. Transpozycja wierszy i kolumn) da tablicę zawierającą wyżej wymienione cztery przekątne:
Nadal brakuje przekątnych poniżej głównej przekątnej.
Jeśli skompresujemy sam A i powtórzymy powyższy proces, otrzymamy tablicę zawierającą główną przekątną i wszystkie przekątne poniżej . Wszystko, co pozostało, to obliczyć ustawione połączenie obu tablic.
Kładąc wszystko razem:
Wypróbuj online.
Wreszcie, jeśli potrzebujemy tylko przekątnych, ponieważ szukamy w nich łańcucha (jak w Puzzle wyszukiwania słowa , która, jak zakładam, zainspirowała to pytanie), odpowiednie może być również podejście „mniej czyste”.
Możesz użyć
aby uzyskać wszystkie przekątne oraz niepotrzebne znaki linii.
Szczegółowo wyjaśniłem ten proces w tej odpowiedzi .
Wypróbuj online.
źródło