พิจารณา
[
"ABCD"
"EFGH"
"IJKL"
]
เพื่อให้ได้เส้นทแยงมุมหลักและเส้นทแยงมุมด้านบนเราสามารถเลื่อนถ่านตัวแรกของแถวที่สองและสองตัวแรกจากสาม:
[
"ABCD"
"FGH"
"KL"
]
โปรดทราบว่าคอลัมน์ทั้งหมดสอดคล้องกับแนวทแยงดังนั้น "การซิป" อาเรย์ (เช่นการสลับแถวและคอลัมน์) จะให้ผลอาร์เรย์ที่มีสี่ diagonals ดังกล่าวข้างต้น:
[
"AFK"
"BGL"
"CH"
"D"
]
เรายังคงคิดถึงเส้นทแยงมุมด้านล่างเส้นทแยงมุมหลัก
หากเราซิปตัวเองและทำซ้ำกระบวนการข้างต้นเราจะได้รับอาร์เรย์ที่มีเส้นทแยงมุมหลักและเส้นทแยงมุมด้านล่างทั้งหมด ทั้งหมดที่เหลือไว้เพื่อคำนวณชุดยูเนี่ยนของทั้งสองอาร์เรย์
วางมันทั้งหมดเข้าด้วยกัน:
[.zip]{:A,,{.A=>}%zip}/|
[.zip]{ }/ # For the original array and it's transpose, do the following:
:A # Store the array in A.
,,{ }% # For each I in [ 0 1 ... len(A) ], do the following:
.A=> # Push A[I] and shift out its first I characters.
zip # Transpose the resulting array.
| # Perform set union.
ลองออนไลน์
ในที่สุดหากเราต้องการ diagonals เพียงเพราะเราค้นหาสตริงในตัวพวกมัน (เช่นในWord Search Puzzleซึ่งฉันคิดว่าเป็นแรงบันดาลใจให้กับคำถามนี้) วิธีการที่ "สะอาดน้อยลง" ก็อาจเหมาะสมเช่นกัน
คุณสามารถใช้ได้
..,n**\.0=,\,+)/zip
เพื่อให้ได้เส้นทแยงมุมทั้งหมดรวมถึงอักขระตัวดึงบรรทัดที่ไม่จำเป็น
ฉันได้อธิบายกระบวนการโดยละเอียดในคำตอบนี้แล้ว
ลองออนไลน์