(มีคำถามที่เกี่ยวข้องเกี่ยวกับทรายแบบไม่สิ้นสุดและการค้นหาองค์ประกอบตัวตนของทราย )
ให้เมทริกซ์ของจำนวนเต็มไม่เป็นลบคืนเมทริกซ์ที่มีขนาดเท่ากัน แต่ล้มลง :
- ถ้าเมทริกซ์ไม่มีค่าใด ๆ ที่มากกว่า 4 ให้คืนค่า
- "เซลล์" ทุกอันที่มีขนาดใหญ่กว่า 3 จะลดลง 4 และเซลล์ที่อยู่ใกล้เคียงโดยตรง (ด้านบนด้านล่างซ้ายและขวา) จะเพิ่มขึ้นหากมีอยู่
- GOTO 1
ตัวอย่าง:
0 1 0 0 2 0
2 4 0 -> 3 0 1
0 0 3 0 1 3
1 2 3 2 3 4 2 5 1 4 1 2 0 3 3 0 3 3 0 3 3
4 5 6 -> 2 4 4 -> 4 2 3 -> 0 5 4 -> 3 2 1 -> 3 3 1 -> 3 3 2
7 8 9 5 7 7 2 6 5 4 3 2 0 5 3 1 1 4 1 2 0
(คุณจะต้องส่งคืนผลลัพธ์ขั้นสุดท้ายเท่านั้นเส้นทางที่คุณไปถึงอาจแตกต่างจากที่แสดงไว้ที่นี่: ไม่สำคัญว่าคุณจะดำเนินการโค่นล้มได้อย่างไร
สำหรับคำอธิบายลึกและแรงจูงใจบางคนเห็นวิดีโอนี้ Numberphileหรือบทความวิกิพีเดียในรูปแบบ sandpile คริสต์
กฎ:
- คุณสามารถรับอินพุตและเอาต์พุตด้วยวิธีมาตรฐาน
- ช่องโหว่เป็นสิ่งต้องห้าม
- อินพุตและเอาต์พุตอาจเป็น:
- รายการซ้อน:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- รายการง่าย:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
และรูปร่าง - ชนิดเมทริกซ์ดั้งเดิมบางชนิด
- สตริงเช่น
1 2 3\n4 5 6\n7 8 9
- หรืออะไรก็ได้ที่ทำงานในภาษาของคุณ
- รายการซ้อน:
- อินพุตและเอาต์พุตต้องอยู่ในรูปแบบเดียวกัน
- ข้อมูลที่ป้อนอาจมีจำนวนมากกว่าที่แสดงที่นี่ แต่ขนาดอาจถูก จำกัด ด้วยขีด จำกัด ของภาษาของคุณ (เทียบเท่ากับ MAXINT หากมี)
- เมทริกซ์อาจมีรูปร่างใด ๆ (เช่น 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ... )
- คุณไม่จำเป็นต้องจัดการเคสที่มีรูปร่างเป็น 0xN หรือ Nx0
Testcases
[[2, 5, 4], [8, 6, 4], [1, 2, 3]] -> [[3, 3, 0], [1, 2, 2], [1, 3, 2]]
[[0, 0, 2], [1, 3, 3], [0, 0, 0]] -> [[0, 0, 2], [1, 3, 3], [0, 0, 0]]
[[9, 9, 9], [9, 9, 9], [9, 9, 9]] -> [[1, 3, 1], [3, 1, 3], [1, 3, 1]]
[[4, 5], [2, 3]] -> [[2, 3], [0, 1]]
[[2, 3, 5], [2, 2, 0]] -> [[3, 0, 2], [2, 3, 1]]
[[7]] -> [[3]]
นี่คือcodegolfรหัสที่สั้นที่สุด (ต่อภาษา) จะชนะ