คำถามนี้ขึ้นอยู่กับปริศนาตัวต่อตัวเลข (ซึ่งรู้จักกันในชื่อตึกระฟ้า) ซึ่งคุณสามารถเล่นออนไลน์ได้ เป้าหมายของคุณคือใช้วิธีแก้ปริศนาและหาเบาะแส - จำนวนหอคอยที่มองเห็นได้ตามแต่ละแถวและคอลัมน์ นี่คือรหัสกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ
วิธีการทำงานของ Towers
วิธีการแก้ปริศนา Towers เป็นตารางละติน - เป็นn*n
ตารางซึ่งในทุกแถวและคอลัมน์ที่มีการเปลี่ยนแปลงของตัวเลขที่ผ่าน1
n
ตัวอย่างสำหรับn=5
คือ:
4 3 5 2 1
5 4 1 3 2
1 5 2 4 3
2 1 3 5 4
3 2 4 1 5
แต่ละแถวและคอลัมน์มีป้ายกำกับที่ปลายแต่ละด้านเช่น:
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
เบาะแสแต่ละอันคือตัวเลขตั้งแต่1
ถึงถึงn
บอกจำนวนหอคอยที่คุณ "เห็น" ที่มองไปตามแถว / คอลัมน์จากทิศทางนั้นถ้าตัวเลขนั้นถือว่าเป็นหอคอยที่มีความสูงนั้น แต่ละหอบล็อกอาคารที่สั้นกว่าด้านหลัง กล่าวอีกนัยหนึ่งหอคอยที่คุณเห็นคือหอคอยที่สูงกว่าหอคอยใด ๆ ข้างหน้าพวกเขา
ตัวอย่างเช่นลองดูแถวแรก
2 > 4 3 5 2 1 < 3
มันมีเงื่อนงำของ2
จากซ้ายเพราะคุณสามารถดูและ4
บล็อกจากสายตาและทุกอย่างที่บล็อกอื่น จากทางด้านขวาคุณสามารถมองเห็นหอคอย, และ5
4
3
5
3
1
2
5
ข้อกำหนดของโปรแกรม
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในตารางของตัวเลขและเอาท์พุทหรือพิมพ์เบาะแสไปตามเข็มนาฬิกาจากด้านบนซ้าย
อินพุต
ละตินตารางด้วยn*n
2<=n<=9
รูปแบบมีความยืดหยุ่น คุณสามารถใช้โครงสร้างข้อมูลใด ๆ ที่แสดงถึงกริดหรือรายการที่มีตัวเลขหรือตัวอักษรตัวเลข คุณอาจต้องการตัวคั่นระหว่างแถวหรือไม่มีตัวคั่นเลย ความเป็นไปได้บางอย่างคือรายการรายการของรายการเมทริกซ์สตริงที่คั่นด้วยโทเค็นเช่น
43521 54132 15243 21354 32415,
หรือสตริงที่ไม่มีช่องว่าง
คุณไม่ได้รับn
เป็นส่วนหนึ่งของอินพุต
เอาท์พุต
ส่งคืนหรือพิมพ์ข้อมูลเริ่มต้นจากด้านบนซ้ายและไปตามเข็มนาฬิกา ดังนั้นก่อนที่เบาะแสด้านบนจะอ่านไปทางขวาจากนั้นเบาะแสด้านขวาจะอ่านลงด้านล่างและจากนั้นเบาะแสด้านล่างจะอ่านไปทางซ้ายส่วนด้านซ้ายจะอ่านขึ้นด้านบน
นี่จะเป็น23145 34321 12222 33212
ตัวอย่างก่อนหน้า
2 3 1 4 5
v v v v v
2 > 4 3 5 2 1 < 3
1 > 5 4 1 3 2 < 4
2 > 1 5 2 4 3 < 3
3 > 2 1 3 5 4 < 2
3 > 3 2 4 1 5 < 1
^ ^ ^ ^ ^
2 2 2 2 1
เช่นเดียวกับอินพุตคุณสามารถใช้รายการสตริงหรือโครงสร้างที่เรียงลำดับ "กลุ่ม" สี่กลุ่มสามารถแยกออกได้หรือไม่ในโครงสร้างแบบซ้อนหรือแบบแบน แต่รูปแบบจะต้องเหมือนกันสำหรับแต่ละกลุ่ม
ตัวอย่างกรณีทดสอบ:
(รูปแบบอินพุต / เอาต์พุตของคุณไม่จำเป็นต้องเหมือนกัน)
>> [[1 2] [2 1]]
[2 1]
[1 2]
[2 1]
[1 2]
>> [[3 1 2] [2 3 1] [1 2 3]]
[1 2 2]
[2 2 1]
[1 2 3]
[3 2 1]
>> [[4 3 5 2 1] [5 4 1 3 2] [1 5 2 4 3] [2 1 3 5 4] [3 2 4 1 5]]
[2 3 1 4 5]
[3 4 3 2 1]
[1 2 2 2 2]
[3 3 2 1 2]
>> [[2 6 4 1 3 7 5 8 9] [7 2 9 6 8 3 1 4 5] [5 9 7 4 6 1 8 2 3] [6 1 8 5 7 2 9 3 4] [1 5 3 9 2 6 4 7 8] [3 7 5 2 4 8 6 9 1] [8 3 1 7 9 4 2 5 6] [9 4 2 8 1 5 3 6 7] [4 8 6 3 5 9 7 1 2]]
[4 2 2 3 3 3 3 2 1]
[1 3 3 2 2 2 2 3 3]
[4 3 2 1 2 3 3 2 2]
[3 1 2 4 3 3 2 2 5]
เพื่อความสะดวกของคุณนี่คือกรณีทดสอบเดียวกันในรูปแบบสตริงแบบแบน
>> 1221
21
12
21
12
>> 312231123
122
221
123
321
>> 4352154132152432135432415
23145
34321
12222
33212
>> 264137589729683145597461823618572934153926478375248691831794256942815367486359712
422333321
133222233
432123322
312433225
≢¨∪¨↓⌈\(⍉⍪⌽⍪⍉∘⌽∘⊖⍪⊖)