พิจารณาเมทริกซ์บล็อกแนวขวางแบบไบบล็อกซึ่งมีบล็อกสี่เหลี่ยมจัตุรัส 1s บนเส้นทแยงมุมหลักและเป็น 0 ทุกที่ ลองเรียกเมทริกซ์นั้นว่า "ถูกต้อง"
ตัวอย่างเช่นต่อไปนี้เป็นเมทริกซ์ 4x4 ที่ถูกต้อง:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
โปรดทราบว่าอีกวิธีหนึ่งในการอธิบายเมทริกซ์นั้นคือมีห่วงโซ่ของสี่เหลี่ยมจัตุรัส 1 ช่วงตึกจากด้านบนซ้ายไปยังด้านล่างขวาล่างแตะมุมจากมุมหนึ่งไปอีกมุมหนึ่งและอีกที่หนึ่งคือ 0
สำหรับความคมชัดนี่คือเมทริกซ์ 4x4 ที่ไม่ถูกต้องบางส่วน:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
คุณจะได้รับn
โดยn
เมทริกซ์ไบนารีเป็นอินพุท - จำนวน0
บิตขั้นต่ำที่คุณต้องตั้งค่า1
เพื่อรับเมทริกซ์ที่ถูกต้องคืออะไร?
คุณอาจจะเขียนฟังก์ชั่นหรือโปรแกรมการในสะดวกสตริงรายการหรือเมทริกซ์รูปแบบใด ๆ ที่เป็นตัวแทนn
จากn
เมทริกซ์ของ 0s และ 1s (ตราบใดที่มันไม่ได้ประมวลผลล่วงหน้า) แถวจะต้องแยกอย่างชัดเจนในบางวิธีดังนั้นรูปแบบเช่นบิต 1D ของอาร์เรย์จะไม่ได้รับอนุญาต
นี่คือโค้ดกอล์ฟดังนั้นเป้าหมายคือเพื่อลดจำนวนไบต์ในโปรแกรมของคุณ
ตัวอย่าง
ตัวอย่างเช่นถ้าอินพุตเป็น
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
ดังนั้นคำตอบคือ 5 เนื่องจากคุณสามารถตั้งค่าห้า0
บิตเป็น1
:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
และนี่คือจำนวนขั้นต่ำที่ต้องการ อย่างไรก็ตามหากอินพุตถูก
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
ดังนั้นคำตอบคือ 24 เนื่องจากเมทริกซ์ 5x5 ที่ถูกต้องเพียงตำแหน่งเดียวที่มุมบนขวาคือ1
เมทริกซ์ของ1
s ทั้งหมด
กรณีทดสอบ
การทดสอบจะแสดงที่นี่เป็นอาร์เรย์ของจำนวนเต็ม 2 มิติ
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
หมายเหตุ
- ความท้าทายที่เกี่ยวข้อง: พิมพ์เมทริกซ์ Block-Diagonal
- Inspiration: Freedom Factory, Google Code Jam 2016 ปัญหา 2D