Apakah ada cara di Golfscript untuk membawa semua diagonal array menjadi satu array?
Misalnya, untuk array
[[1 2 3][4 5 6][7 8 9]]
kembali
[[7][4 8][1 5 9][2 6][3]]
(tidak harus dalam urutan itu) dan untuk
["ABCD""EFGH""IJKL"]
kembali
["I""EJ""AFK""BGL""CH""D"]
(tidak harus dalam urutan itu). Asumsikan panjang array adalah sama.
Saya berjuang dengan mencari tahu. Saya mencoba melakukan sesuatu dengan =
dan mengulangi (length+1)
karakter th string, tetapi itu tidak berhasil. Adakah yang bisa membantu saya?
Saya ingin cara terpendek untuk melakukan ini, jika memungkinkan.
code-golf
array-manipulation
tips
golfscript
Josiah Winslow
sumber
sumber
Jawaban:
Mempertimbangkan
Untuk mendapatkan diagonal utama dan diagonal di atasnya, kita dapat menggeser karakter pertama dari baris kedua dan dua yang pertama dari baris ketiga:
Perhatikan bahwa semua kolom sesuai dengan diagonal, jadi "zipping" array (yaitu, transposing baris dan kolom) akan menghasilkan array yang berisi empat diagonal yang disebutkan di atas:
Kami masih kehilangan diagonal di bawah diagonal utama.
Jika kita membuka zip sendiri dan mengulangi proses di atas, kita akan mendapatkan array yang berisi diagonal utama dan semua diagonal di bawahnya. Semua yang tersisa untuk menghitung gabungan set dari kedua array.
Menyatukan semuanya:
Cobalah online.
Akhirnya, jika kita hanya perlu diagonal karena kita sedang mencari string di dalamnya (seperti dalam Puzzle Pencarian Kata , yang saya asumsikan mengilhami pertanyaan ini), pendekatan "kurang bersih" mungkin juga cocok.
Kamu bisa menggunakan
untuk mendapatkan semua diagonal, ditambah beberapa karakter linefeed yang tidak perlu.
Saya telah menjelaskan proses secara terperinci dalam jawaban ini .
Cobalah online.
sumber