Цей натхненний останнім викликом таблиці Хобі Кальвіна, що займається таблицею множення .
Напишіть функцію або програму, яка приймає ціле число N
як вхід і друкує або повертає унікальну спіраль множення N-на-N. Код повинен (теоретично) працювати для N від 0 до 1000 (хоча виведення цього може бути важким). Вихід повинен бути еквівалентний таблиці, отриманій за наступною процедурою:
Заповніть таблицю множення N-на-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, це не може бути просто списком. Формати, такі, як наведено нижче, приймаються, оскільки є N легко розрізнених стовпців 1 на N або N-на-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, або питання буде невідповідним.