Например, представьте, что у вас есть 6-сторонняя квадратная матрица.
Это клетки декартовых индексов:
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5)
6-сторонний квадрат имеет 3 кольца: a
A A A A A A
A B B B B A
A B C C B A
A B C C B A
A B B B B A
A A A A A A
ВОПРОС : Какая функция берет координаты ячейки, стороны N квадрата и, соответственно, возвращает значение кольца? Пример:
f(x = 1, y 2, N = 6) = B
A, B, C ... может быть любым числовым значением: 1,2,3 ... или 0,1,2 ... или любым другим. Важно то, что они равны для любого N. Например:
N = 1 => A = 1
N = 2 => A = 1
N = 3 => A = 1, B = 2
N = 4 => A = 1, B = 2
N = 5 => A = 1, B = 2, C = 3
N = 6 => A = 1, B = 2, C = 3
N = 7 => A = 1, B = 2, C = 4, D = 4
...
Используя условия, проблема легко решается.
Дана пара (x, y) и квадратная сторона N:
# N//2 is the number of rings in a N-side square
for k in range(1,N//2+1):
if x == 0+k-1 or y== 0+k-1 or x == N-k or y == N-1:
return k
Похоже, это очень дорогой способ найти значение кольца в ячейке.
Я пытался найти функцию, используя диагонали, сумму координат, разницу координат ... ячеек, но я все еще ничего не мог найти.
Кто-нибудь когда-нибудь сталкивался с этой проблемой?
Есть ли способ решить это?