PolyLib

Любите головоломки, а особенно нетривиальные? Обожаете делить плоскость на равные части? Вас привлекают связные фигуры из квадратиков? Но вы ненавидите тупую машинную работу? Эта либа готова сделать ее за вас!

Общее

Python3 библиотека для загрузки, решения и вывода на экран и сохранения в svg различных задач связанных с разделением на полимино.
Результат работы Пример работы программы, разделение доски 15x6 на различные тетрамино.

1
2
3
4
5
6
7
8
9
10
import parser
import solver

figure = parser.load('figure.pol')

for idx, s in enumerate(solver.polyomino_split(figure, 4)):
parser.save_solution_to_svg(s, str(idx)+'th_sol.svg')
parser.pretty_print_solution(s)
print()
break # Потому что нам нужно только первое решение

А теперь давайте решим какую-нибудь детскую задачу на разрезание:


1.10. Разделите фигуру (рис. 7) на четыре равные части так, что-
бы линии разрезов шли по сторонам квадратов. Найдите как можно больше решений.
Рисунок_7


Забьем фигуру в figure.pol:

1
2
3
4
5
6
   X
XXXX
XXXXX
XXXXX
XXXX
X

А дальше воспользуемся волшебной функцией:

1
2
3
4
5
6
7
import parser
import solver

figure = parser.load('figure.pol')

for idx, s in enumerate(solver.auto_congruent_polyomino_split(figure, 5)):
parser.save_solution_to_svg(s, str(idx)+'th_sol.svg')

А вот и все 9 решений:
РешенияВперед пробовать и ставить звезды:

https://github.com/zpix1/polyomino

Programming | Math
Программирование, математика, компьютерная безопасность.
zprav zpix1 zpix1 zpix-dev@list.ru

Теги

Programming | Math | CTF | Fun