คนนี้เป็นแรงบันดาลใจจากงานอดิเรกล่าสุดของเคลวินคูณท้าทายตาราง
เขียนฟังก์ชั่นหรือโปรแกรมที่ใช้จำนวนเต็มN
เป็นอินพุตและพิมพ์หรือส่งกลับเกลียวหมุนคูณ N-by-N ที่ไม่ซ้ำกัน รหัสจะต้องทำงาน (ในทางทฤษฎี) สำหรับ N ระหว่าง 0 ถึง 1,000 (การส่งออกอาจเป็นเรื่องยาก) เอาต์พุตควรเทียบเท่ากับตารางที่สร้างโดยโพรซีเดอร์ต่อไปนี้:
กรอกตารางการคูณ N-by-N เช่นสำหรับ N = 3:
1 2 3 2 4 6 3 6 9
หมุนวนตามเข็มนาฬิกาจากมุมซ้ายบนสังเกตตัวเลขที่คุณไป เมื่อคุณเยี่ยมชมหมายเลขที่คุณเคยเยี่ยมชมให้แทนที่ด้วย 0
ตัวอย่างบางส่วนอาจทำให้ชัดเจนยิ่งขึ้น:
n = 0:
0
n = 1:
1
n = 2: // Spiral order:
1 2 // 1 2
0 4 // 4 3
n = 3:
1 2 3 // 1 2 3
0 4 6 // 8 9 4
0 0 9 // 7 6 5
n = 4:
1 2 3 4 // 1 2 3 4
0 0 6 8 // 12 13 14 5
0 0 9 12 // 11 16 15 6
0 0 0 16 // 10 9 8 7
n = 5:
1 2 3 4 5
0 0 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
n = 10:
1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 12 14 16 18 20
0 0 0 0 15 0 21 24 27 30
0 0 0 0 0 0 28 32 36 40
0 0 0 0 25 0 35 0 45 50
0 0 0 0 0 0 42 48 54 60
0 0 0 0 0 0 49 56 63 70
0 0 0 0 0 0 0 64 72 80
0 0 0 0 0 0 0 0 81 90
0 0 0 0 0 0 0 0 0 100
พบตัวเลขดังนี้:
รูปแบบเอาต์พุตที่สมเหตุสมผลใด ๆ ได้รับการยอมรับ แต่ต้องเป็นเมทริกซ์ N-by-N ซึ่งไม่สามารถเป็นเพียงรายการได้ รูปแบบดังกล่าวได้รับการยอมรับด้านล่างเนื่องจากมีคอลัมน์ที่ 1-by-N ที่แยกแยะได้ง่าย N หรือ N-by-1 แถว:
[[1 2 3][0 4 6][0 0 9]] <-- OK
[[1 0 0][2 4 0][3 6 9]] <-- OK
ans = <-- OK
1 2 3
0 4 6
0 0 9
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
n=0
ที่ไม่มีศูนย์ในตารางการคูณ ฉันสามารถเข้าใจn=1
ผลลัพธ์ 1 ได้ แต่ทำไมถึงมีค่าเป็นศูนย์
n=0
ควรเป็นเมทริกซ์ 0 คูณ 0 หรือคำถามจะไม่สอดคล้องกัน