Как разделить квадрат на N одинаковых прямоугольников и получить их маски?
У меня есть ширина квадрата и количество итоговых зон, на сколько нужно разделить этот квадрат. Каким алгоритмом можно найти маски каждой из зон?
Выделил несколько фактов в этой задаче:
- Если есть ширина, то известно, сколько всего клеточек в квадрате
- Если есть общее количество клеток и количество итоговых зон, то известно, сколько клеточек в каждой зоне
Но что это дает?
Вот пара примеров:
Ширина - 4
Количество зон - 2
0123
0AAAA
1AAAA
2BBBB
3BBBB
Ответ: [
[[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]]
]
Если зоны получатся такими, то так тоже подойдет, просто ответ будет немного другим:
0123
0AABB
1AABB
2AABB
3AABB
Ширина - 6
Количество зон - 9
012345
0AABBCC
1AABBCC
2DDEEFF
3DDEEFF
4GGHHII
5GGHHII
Ответ: [
[[1, 1, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[[0, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
...
]
В первом случае можно было бы идти двойным циклом по порядку и как только бы собралось нежное количество клеточек, то можно было бы к следующей зоне переходить. Но что делать со вторым случаем? Там так сделать будет нельзя, потому что возьмется только 4 первых клеток в первом ряду.