Этот вдохновлен недавним вызовом Calvin's Hobbies для таблицы умножения .
Напишите функцию или программу, которая принимает целое число в 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-N-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, иначе вопрос будет противоречивым.