Điều này được lấy cảm hứng từ thử thách bảng nhân gần đây của Calvin .
Viết hàm hoặc chương trình lấy số nguyên N
làm đầu vào và in hoặc trả về vòng xoắn nhân duy nhất N-by-N. Mã phải (về lý thuyết) làm việc cho N trong khoảng từ 0 đến 1000 (việc xuất ra điều này có thể khó khăn). Đầu ra phải tương đương với bảng được tạo bởi quy trình sau:
Điền vào bảng nhân N-by-N. Ví dụ: N = 3:
1 2 3 2 4 6 3 6 9
Theo một vòng xoắn ốc theo chiều kim đồng hồ từ góc trên bên trái, lưu ý các số mà bạn truy cập. Khi bạn truy cập một số mà bạn đã truy cập, thay thế nó bằng 0.
Một vài ví dụ có thể làm cho nó rõ ràng hơn:
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
Các số được tìm thấy như thế này:
Bất kỳ định dạng đầu ra hợp lý nào đều được chấp nhận, nhưng nó phải là ma trận N-by-N, nó không thể chỉ là một danh sách. Các định dạng như vậy dưới đây được chấp nhận, vì có N cột 1-N dễ phân biệt hoặc hàng 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
Mã ngắn nhất trong byte thắng.
n=0
nơi không có số 0 trong các bảng nhân. Tôi có thể hiểu n=1
đầu ra 1, nhưng tại sao lại bao gồm 0?
n=0
phải là ma trận 0-by-0, hoặc câu hỏi sẽ không nhất quán.