tilingPuzzles 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tilingpuzzles-0.2.0/.gitignore +118 -0
- tilingpuzzles-0.2.0/.python-version +1 -0
- tilingpuzzles-0.2.0/Demo.ipynb +435 -0
- tilingpuzzles-0.2.0/IPYNB/.gitignore +1 -0
- tilingpuzzles-0.2.0/IPYNB/Test-subtree.qmd +0 -0
- tilingpuzzles-0.2.0/IPYNB/Testing-counts.qmd +43 -0
- tilingpuzzles-0.2.0/IPYNB/Testing-grafik.qmd +244 -0
- tilingpuzzles-0.2.0/IPYNB/Testing-pytest.qmd +108 -0
- tilingpuzzles-0.2.0/IPYNB/Testing-solvers.qmd +48 -0
- tilingpuzzles-0.2.0/PKG-INFO +44 -0
- tilingpuzzles-0.2.0/README.md +24 -0
- tilingpuzzles-0.2.0/docs/.gitignore +1 -0
- tilingpuzzles-0.2.0/docs/README.md +6 -0
- tilingpuzzles-0.2.0/docs/_quarto.yml +8 -0
- tilingpuzzles-0.2.0/docs/src/Stone.qmd +63 -0
- tilingpuzzles-0.2.0/docs/src/Tile.qmd +14 -0
- tilingpuzzles-0.2.0/pyproject.toml +30 -0
- tilingpuzzles-0.2.0/pytest.ini +3 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/__init__.py +6 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/benchmark/README.md +10 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/benchmark/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/benchmark/data/timingResulsts.csv +193 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/benchmark/git_state.py +22 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/benchmark/run_benchmark.py +105 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/README.md +3 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/rectangularPentomino.py +40 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/scaledStones.py +163 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/tests/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/tests/test_rectangularPentomino.py +24 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/examples/tests/test_scaledStones.py +8 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/__init__.py +2 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/game.py +20 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/generic.py +7 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/komino.py +147 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/realisations.py +78 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/stone.py +536 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/stone_core.py +48 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/test_game.py +7 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/test_komino.py +30 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/test_realisations.py +28 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/test_stone.py +172 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tests/test_tile.py +19 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/games/tile.py +39 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/logUtils/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/logUtils/callGraph.py +47 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/logger.py +39 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/solvers/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/solvers/hights.py +3 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/solvers/kominoSolver.py +191 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/solvers/tests/test_komino_solver.py +30 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/visualize/__init__.py +0 -0
- tilingpuzzles-0.2.0/src/tilingpuzzles/visualize/visualize.py +61 -0
- tilingpuzzles-0.2.0/test/test_pytest.py +5 -0
- tilingpuzzles-0.2.0/test/vibetest_1.py +17 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
|
2
|
+
Testing*.ipynb
|
3
|
+
|
4
|
+
#rendered Docs
|
5
|
+
|
6
|
+
docs/rendered/
|
7
|
+
|
8
|
+
#Tracked Calls
|
9
|
+
Digraph.gv
|
10
|
+
Digraph.gv.pdf
|
11
|
+
|
12
|
+
# Quarto specific
|
13
|
+
*.canvas
|
14
|
+
tilingpuzzles.md
|
15
|
+
|
16
|
+
# quarto
|
17
|
+
.quarto/
|
18
|
+
|
19
|
+
#uv
|
20
|
+
|
21
|
+
uv.lock
|
22
|
+
|
23
|
+
|
24
|
+
# Python-generated files
|
25
|
+
__pycache__/
|
26
|
+
*.py[oc]
|
27
|
+
build/
|
28
|
+
dist/
|
29
|
+
wheels/
|
30
|
+
*.egg-info
|
31
|
+
|
32
|
+
# Virtual environments
|
33
|
+
.venv
|
34
|
+
|
35
|
+
# Byte-compiled / optimized / DLL files
|
36
|
+
__pycache__/
|
37
|
+
*.py[cod]
|
38
|
+
*$py.class
|
39
|
+
|
40
|
+
# C extensions
|
41
|
+
*.so
|
42
|
+
|
43
|
+
# Distribution / packaging
|
44
|
+
.Python
|
45
|
+
build/
|
46
|
+
develop-eggs/
|
47
|
+
dist/
|
48
|
+
downloads/
|
49
|
+
eggs/
|
50
|
+
.eggs/
|
51
|
+
lib/
|
52
|
+
lib64/
|
53
|
+
parts/
|
54
|
+
sdist/
|
55
|
+
var/
|
56
|
+
wheels/
|
57
|
+
share/python-wheels/
|
58
|
+
*.egg-info/
|
59
|
+
.installed.cfg
|
60
|
+
*.egg
|
61
|
+
MANIFEST
|
62
|
+
|
63
|
+
# PyInstaller
|
64
|
+
# Usually these files are written by a python script from a template
|
65
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
66
|
+
*.manifest
|
67
|
+
*.spec
|
68
|
+
|
69
|
+
# Installer logs
|
70
|
+
pip-log.txt
|
71
|
+
pip-delete-this-directory.txt
|
72
|
+
|
73
|
+
# Unit test / coverage reports
|
74
|
+
htmlcov/
|
75
|
+
.tox/
|
76
|
+
.nox/
|
77
|
+
.coverage
|
78
|
+
.coverage.*
|
79
|
+
.cache
|
80
|
+
nosetests.xml
|
81
|
+
coverage.xml
|
82
|
+
*.cover
|
83
|
+
*.py,cover
|
84
|
+
.hypothesis/
|
85
|
+
.pytest_cache/
|
86
|
+
cover/
|
87
|
+
|
88
|
+
# Translations
|
89
|
+
*.mo
|
90
|
+
*.pot
|
91
|
+
|
92
|
+
# Django stuff:
|
93
|
+
*.log
|
94
|
+
local_settings.py
|
95
|
+
db.sqlite3
|
96
|
+
db.sqlite3-journal
|
97
|
+
|
98
|
+
# Flask stuff:
|
99
|
+
instance/
|
100
|
+
.webassets-cache
|
101
|
+
|
102
|
+
# Scrapy stuff:
|
103
|
+
.scrapy
|
104
|
+
|
105
|
+
# Sphinx documentation
|
106
|
+
docs/_build/
|
107
|
+
|
108
|
+
# PyBuilder
|
109
|
+
.pybuilder/
|
110
|
+
target/
|
111
|
+
|
112
|
+
# Jupyter Notebook
|
113
|
+
.ipynb_checkpoints
|
114
|
+
|
115
|
+
# IPython
|
116
|
+
profile_default/
|
117
|
+
ipython_config.py
|
118
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
pypy@3.11
|
@@ -0,0 +1,435 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"id": "775491ad",
|
6
|
+
"metadata": {},
|
7
|
+
"source": [
|
8
|
+
"# finden einer Lösung"
|
9
|
+
]
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"cell_type": "code",
|
13
|
+
"execution_count": null,
|
14
|
+
"id": "953cb2a3",
|
15
|
+
"metadata": {},
|
16
|
+
"outputs": [
|
17
|
+
{
|
18
|
+
"data": {
|
19
|
+
"image/png": "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",
|
20
|
+
"text/plain": [
|
21
|
+
"<Figure size 640x480 with 1 Axes>"
|
22
|
+
]
|
23
|
+
},
|
24
|
+
"metadata": {},
|
25
|
+
"output_type": "display_data"
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"data": {
|
29
|
+
"image/png": "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MgCAMYOCAQCYoGAAACYoGACACQoGAGCCggEAmKBgAAAmKBgAgAkKBgBgwvzr+r/o4BcHjNR/PAYAGD0H5+6hfAnMqBfMnj17JIn/eAwAitiePXsUi8WO+p5R/y4yz/P02WefqbKyUqFQqODlD/6HZTt27OC7zL4E22ro2FZDw3YaurG6rXzf1549e1RXV/el/znfqJ/BhMNhnXzyycf8+1RVVY2pnWaJbTV0bKuhYTsN3VjcVl925nIQN/kBACYoGACAiaIrmGg0qrvuukvRaNR1lMBjWw0d22po2E5Dx7ZycJMfAPDVUHRnMACA4kDBAABMUDAAABMUDADARNEUTHt7u8477zxVVlaqurpaV111lbZt2+Y6VuDdf//9CoVCam1tdR0lkD799FNdf/31isfjqqio0LRp0/TWW2+5jhU4mUxGCxYsUENDgyoqKnT66afrnnvuGdL3UY1169ev15VXXqm6ujqFQiE9//zzg37d930tXLhQEydOVEVFhS655BK9//77bsKOsqIpmHXr1qmlpUUbN27UmjVrlE6ndemll2rfvn2uowXWpk2b9Nhjj+nMM890HSWQdu3apebmZpWWluqll17S3/72N/3yl7/UCSec4Dpa4CxevFjLli3TI488or///e9avHixHnjgAT388MOuozm3b98+nXXWWXr00UcP++sPPPCAHnroIS1fvlxvvPGGxo0bp8suu0zJZHKUkzrgF6mdO3f6kvx169a5jhJIe/bs8SdPnuyvWbPG/853vuPPmTPHdaTAueOOO/xvfetbrmMUhcsvv9y/+eabB732gx/8wJ85c6ajRMEkyV+9enX2ued5fm1trf+LX/wi+9ru3bv9aDTqP/300w4Sjq6iOYP5ot7eXknSiSee6DhJMLW0tOjyyy/XJZdc4jpKYP3ud7/T9OnTdc0116i6ulrnnHOOHn/8cdexAmnGjBlau3attm/fLkl69913tWHDBn3ve99znCzYPvroI3V2dg76OYzFYjr//PP1+uuvO0w2Okb9yy5Hgud5am1tVXNzs5qamlzHCZxnnnlGb7/9tjZt2uQ6SqB9+OGHWrZsmdra2vSzn/1MmzZt0uzZs1VWVqZZs2a5jhco8+bNUyKR0JQpUxSJRJTJZLRo0SLNnDnTdbRA6+zslCTV1NQMer2mpib7a2NZURZMS0uLOjo6tGHDBtdRAmfHjh2aM2eO1qxZo/LyctdxAs3zPE2fPl333XefJOmcc85RR0eHli9fTsF8wXPPPaennnpKq1atUmNjo7Zs2aLW1lbV1dWxrXBERXeJ7LbbbtOLL76oV155ZUS+9n+s2bx5s3bu3Klzzz1XJSUlKikp0bp16/TQQw+ppKREmUzGdcTAmDhxos4444xBr02dOlX/+Mc/HCUKrttvv13z5s3Tddddp2nTpumGG27Q3Llz1d7e7jpaoNXW1kqSurq6Br3e1dWV/bWxrGgKxvd93XbbbVq9erX+9Kc/qaGhwXWkQLr44ov13nvvacuWLdnH9OnTNXPmTG3ZskWRSMR1xMBobm4+5KPu27dv1ymnnOIoUXDt37//kP9cKhKJyPM8R4mKQ0NDg2pra7V27drsa4lEQm+88YYuuOACh8lGR9FcImtpadGqVav0wgsvqLKyMnv9MhaLqaKiwnG64KisrDzkvtS4ceMUj8e5X/UFc+fO1YwZM3Tffffp2muv1ZtvvqkVK1ZoxYoVrqMFzpVXXqlFixZp0qRJamxs1DvvvKMlS5bo5ptvdh3Nub179+qDDz7IPv/oo4+0ZcsWnXjiiZo0aZJaW1t17733avLkyWpoaNCCBQtUV1enq666yl3o0eL6Y2xDJemwjyeeeMJ1tMDjY8pH9vvf/95vamryo9GoP2XKFH/FihWuIwVSIpHw58yZ40+aNMkvLy/3TzvtNP/OO+/0U6mU62jOvfLKK4edm2bNmuX7/sBHlRcsWODX1NT40WjUv/jii/1t27a5DT1K+Lp+AICJorkHAwAoLhQMAMAEBQMAMEHBAABMUDAAABMUDADABAUDADBBwQAATFAwAAATFAwAwAQFAwAwQcEAAEz8f8QsQYGDR0+TAAAAAElFTkSuQmCC",
|
30
|
+
"text/plain": [
|
31
|
+
"<Figure size 640x480 with 1 Axes>"
|
32
|
+
]
|
33
|
+
},
|
34
|
+
"metadata": {},
|
35
|
+
"output_type": "display_data"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"data": {
|
39
|
+
"text/plain": [
|
40
|
+
"[frozenset({(8, 7), (9, 6), (9, 7), (9, 8), (10, 7), (10, 8)}),\n",
|
41
|
+
" frozenset({(6, 2), (7, 2), (7, 3), (8, 2), (8, 3), (9, 2)}),\n",
|
42
|
+
" frozenset({(7, 4), (8, 4), (8, 5), (8, 6), (9, 4), (9, 5)}),\n",
|
43
|
+
" frozenset({(9, 3), (10, 2), (10, 3), (10, 4), (10, 5), (10, 6)}),\n",
|
44
|
+
" frozenset({(4, 2), (5, 0), (5, 1), (5, 2), (6, 0), (6, 1)}),\n",
|
45
|
+
" frozenset({(3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5)}),\n",
|
46
|
+
" frozenset({(3, 4), (4, 4), (5, 4), (5, 5), (5, 6), (6, 6)}),\n",
|
47
|
+
" frozenset({(2, 3), (2, 4), (2, 5), (2, 6), (3, 5), (3, 6)}),\n",
|
48
|
+
" frozenset({(2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2)})]"
|
49
|
+
]
|
50
|
+
},
|
51
|
+
"execution_count": 20,
|
52
|
+
"metadata": {},
|
53
|
+
"output_type": "execute_result"
|
54
|
+
}
|
55
|
+
],
|
56
|
+
"source": [
|
57
|
+
"from tilingpuzzles.games.stone import Stone\n",
|
58
|
+
"from tilingpuzzles.games.komino import Komino\n",
|
59
|
+
"\n",
|
60
|
+
"# Ordnung der steine \n",
|
61
|
+
"# k=5 => Pentomino\n",
|
62
|
+
"k=6\n",
|
63
|
+
"\n",
|
64
|
+
"# Zu bedeckende fläche \n",
|
65
|
+
"U=\"\"\"\n",
|
66
|
+
"#######\n",
|
67
|
+
"#######\n",
|
68
|
+
" ###\n",
|
69
|
+
"#######\n",
|
70
|
+
"#######\n",
|
71
|
+
" ###\n",
|
72
|
+
" ######\n",
|
73
|
+
" #######\n",
|
74
|
+
" #######\n",
|
75
|
+
"\"\"\"\n",
|
76
|
+
"\n",
|
77
|
+
"U=Stone.from_string(U)\n",
|
78
|
+
"\n",
|
79
|
+
"assert len(U)%k==0\n",
|
80
|
+
"\n",
|
81
|
+
"display(U)\n",
|
82
|
+
"\n",
|
83
|
+
"komi=Komino(U,k=k)\n",
|
84
|
+
"# limits: anzahl wie oft jeder stein verwendet werden kann\n",
|
85
|
+
"komi.find_solution(limits=1)\n"
|
86
|
+
]
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"cell_type": "markdown",
|
90
|
+
"id": "6ac3e29d",
|
91
|
+
"metadata": {},
|
92
|
+
"source": [
|
93
|
+
"# Anzahl Lösungen wenn jeder stein beliebig oft verwendet werden kann"
|
94
|
+
]
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"cell_type": "code",
|
98
|
+
"execution_count": null,
|
99
|
+
"id": "74e465e6",
|
100
|
+
"metadata": {},
|
101
|
+
"outputs": [
|
102
|
+
{
|
103
|
+
"data": {
|
104
|
+
"application/vnd.jupyter.widget-view+json": {
|
105
|
+
"model_id": "b7a9d7fc72664bafae2d3664faff772a",
|
106
|
+
"version_major": 2,
|
107
|
+
"version_minor": 0
|
108
|
+
},
|
109
|
+
"text/plain": [
|
110
|
+
"Level 0: 0%| | 0/69 [00:00<?, ?it/s]"
|
111
|
+
]
|
112
|
+
},
|
113
|
+
"metadata": {},
|
114
|
+
"output_type": "display_data"
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"data": {
|
118
|
+
"application/vnd.jupyter.widget-view+json": {
|
119
|
+
"model_id": "4fe9037f05cc45168cd5fc8f3284a492",
|
120
|
+
"version_major": 2,
|
121
|
+
"version_minor": 0
|
122
|
+
},
|
123
|
+
"text/plain": [
|
124
|
+
"Level 1: 0%| | 0/539 [00:00<?, ?it/s]"
|
125
|
+
]
|
126
|
+
},
|
127
|
+
"metadata": {},
|
128
|
+
"output_type": "display_data"
|
129
|
+
},
|
130
|
+
{
|
131
|
+
"data": {
|
132
|
+
"application/vnd.jupyter.widget-view+json": {
|
133
|
+
"model_id": "e7dcced0e39c4b40af437118481670c9",
|
134
|
+
"version_major": 2,
|
135
|
+
"version_minor": 0
|
136
|
+
},
|
137
|
+
"text/plain": [
|
138
|
+
"Level 1: 0%| | 0/440 [00:00<?, ?it/s]"
|
139
|
+
]
|
140
|
+
},
|
141
|
+
"metadata": {},
|
142
|
+
"output_type": "display_data"
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"data": {
|
146
|
+
"application/vnd.jupyter.widget-view+json": {
|
147
|
+
"model_id": "5d427e80493240bd865c5f4492bb2bc4",
|
148
|
+
"version_major": 2,
|
149
|
+
"version_minor": 0
|
150
|
+
},
|
151
|
+
"text/plain": [
|
152
|
+
"Level 1: 0%| | 0/437 [00:00<?, ?it/s]"
|
153
|
+
]
|
154
|
+
},
|
155
|
+
"metadata": {},
|
156
|
+
"output_type": "display_data"
|
157
|
+
},
|
158
|
+
{
|
159
|
+
"data": {
|
160
|
+
"application/vnd.jupyter.widget-view+json": {
|
161
|
+
"model_id": "4223f8bb1ede4c4e99d57afa6d4c6ab1",
|
162
|
+
"version_major": 2,
|
163
|
+
"version_minor": 0
|
164
|
+
},
|
165
|
+
"text/plain": [
|
166
|
+
"Level 1: 0%| | 0/73 [00:00<?, ?it/s]"
|
167
|
+
]
|
168
|
+
},
|
169
|
+
"metadata": {},
|
170
|
+
"output_type": "display_data"
|
171
|
+
},
|
172
|
+
{
|
173
|
+
"data": {
|
174
|
+
"application/vnd.jupyter.widget-view+json": {
|
175
|
+
"model_id": "4532f33716e54753a3fb56e9997ea07e",
|
176
|
+
"version_major": 2,
|
177
|
+
"version_minor": 0
|
178
|
+
},
|
179
|
+
"text/plain": [
|
180
|
+
"Level 1: 0%| | 0/144 [00:00<?, ?it/s]"
|
181
|
+
]
|
182
|
+
},
|
183
|
+
"metadata": {},
|
184
|
+
"output_type": "display_data"
|
185
|
+
},
|
186
|
+
{
|
187
|
+
"data": {
|
188
|
+
"application/vnd.jupyter.widget-view+json": {
|
189
|
+
"model_id": "d72923f05e8c4e1db13c0e799652bb2e",
|
190
|
+
"version_major": 2,
|
191
|
+
"version_minor": 0
|
192
|
+
},
|
193
|
+
"text/plain": [
|
194
|
+
"Level 1: 0%| | 0/23 [00:00<?, ?it/s]"
|
195
|
+
]
|
196
|
+
},
|
197
|
+
"metadata": {},
|
198
|
+
"output_type": "display_data"
|
199
|
+
},
|
200
|
+
{
|
201
|
+
"data": {
|
202
|
+
"application/vnd.jupyter.widget-view+json": {
|
203
|
+
"model_id": "2683d02b41ef461c8cb0ca8937ed5c68",
|
204
|
+
"version_major": 2,
|
205
|
+
"version_minor": 0
|
206
|
+
},
|
207
|
+
"text/plain": [
|
208
|
+
"Level 1: 0%| | 0/43 [00:00<?, ?it/s]"
|
209
|
+
]
|
210
|
+
},
|
211
|
+
"metadata": {},
|
212
|
+
"output_type": "display_data"
|
213
|
+
},
|
214
|
+
{
|
215
|
+
"data": {
|
216
|
+
"application/vnd.jupyter.widget-view+json": {
|
217
|
+
"model_id": "c5ebacd3024c4adc8b8ac5bf71a3603f",
|
218
|
+
"version_major": 2,
|
219
|
+
"version_minor": 0
|
220
|
+
},
|
221
|
+
"text/plain": [
|
222
|
+
"Level 1: 0%| | 0/52 [00:00<?, ?it/s]"
|
223
|
+
]
|
224
|
+
},
|
225
|
+
"metadata": {},
|
226
|
+
"output_type": "display_data"
|
227
|
+
},
|
228
|
+
{
|
229
|
+
"data": {
|
230
|
+
"application/vnd.jupyter.widget-view+json": {
|
231
|
+
"model_id": "cbbd261fe0d04253bbff9699a42e4176",
|
232
|
+
"version_major": 2,
|
233
|
+
"version_minor": 0
|
234
|
+
},
|
235
|
+
"text/plain": [
|
236
|
+
"Level 1: 0%| | 0/16 [00:00<?, ?it/s]"
|
237
|
+
]
|
238
|
+
},
|
239
|
+
"metadata": {},
|
240
|
+
"output_type": "display_data"
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"data": {
|
244
|
+
"application/vnd.jupyter.widget-view+json": {
|
245
|
+
"model_id": "1e78e9247bf244ab895924fb166e58ba",
|
246
|
+
"version_major": 2,
|
247
|
+
"version_minor": 0
|
248
|
+
},
|
249
|
+
"text/plain": [
|
250
|
+
"Level 1: 0%| | 0/128 [00:00<?, ?it/s]"
|
251
|
+
]
|
252
|
+
},
|
253
|
+
"metadata": {},
|
254
|
+
"output_type": "display_data"
|
255
|
+
},
|
256
|
+
{
|
257
|
+
"data": {
|
258
|
+
"application/vnd.jupyter.widget-view+json": {
|
259
|
+
"model_id": "5650ac067469406d918f59781b6de699",
|
260
|
+
"version_major": 2,
|
261
|
+
"version_minor": 0
|
262
|
+
},
|
263
|
+
"text/plain": [
|
264
|
+
"Level 1: 0%| | 0/67 [00:00<?, ?it/s]"
|
265
|
+
]
|
266
|
+
},
|
267
|
+
"metadata": {},
|
268
|
+
"output_type": "display_data"
|
269
|
+
},
|
270
|
+
{
|
271
|
+
"data": {
|
272
|
+
"application/vnd.jupyter.widget-view+json": {
|
273
|
+
"model_id": "5cf1da27c98f421c958ec9dab1db9150",
|
274
|
+
"version_major": 2,
|
275
|
+
"version_minor": 0
|
276
|
+
},
|
277
|
+
"text/plain": [
|
278
|
+
"Level 1: 0%| | 0/146 [00:00<?, ?it/s]"
|
279
|
+
]
|
280
|
+
},
|
281
|
+
"metadata": {},
|
282
|
+
"output_type": "display_data"
|
283
|
+
},
|
284
|
+
{
|
285
|
+
"data": {
|
286
|
+
"application/vnd.jupyter.widget-view+json": {
|
287
|
+
"model_id": "9c85268a5bd0452986c850072200516d",
|
288
|
+
"version_major": 2,
|
289
|
+
"version_minor": 0
|
290
|
+
},
|
291
|
+
"text/plain": [
|
292
|
+
"Level 1: 0%| | 0/158 [00:00<?, ?it/s]"
|
293
|
+
]
|
294
|
+
},
|
295
|
+
"metadata": {},
|
296
|
+
"output_type": "display_data"
|
297
|
+
},
|
298
|
+
{
|
299
|
+
"data": {
|
300
|
+
"application/vnd.jupyter.widget-view+json": {
|
301
|
+
"model_id": "0692616457224dae9675e0fa277b03d4",
|
302
|
+
"version_major": 2,
|
303
|
+
"version_minor": 0
|
304
|
+
},
|
305
|
+
"text/plain": [
|
306
|
+
"Level 1: 0%| | 0/160 [00:00<?, ?it/s]"
|
307
|
+
]
|
308
|
+
},
|
309
|
+
"metadata": {},
|
310
|
+
"output_type": "display_data"
|
311
|
+
},
|
312
|
+
{
|
313
|
+
"data": {
|
314
|
+
"application/vnd.jupyter.widget-view+json": {
|
315
|
+
"model_id": "91921831b4be453a88ea5aee915c730c",
|
316
|
+
"version_major": 2,
|
317
|
+
"version_minor": 0
|
318
|
+
},
|
319
|
+
"text/plain": [
|
320
|
+
"Level 1: 0%| | 0/53 [00:00<?, ?it/s]"
|
321
|
+
]
|
322
|
+
},
|
323
|
+
"metadata": {},
|
324
|
+
"output_type": "display_data"
|
325
|
+
},
|
326
|
+
{
|
327
|
+
"data": {
|
328
|
+
"application/vnd.jupyter.widget-view+json": {
|
329
|
+
"model_id": "f131b64181fc486ab70459dfb1e50363",
|
330
|
+
"version_major": 2,
|
331
|
+
"version_minor": 0
|
332
|
+
},
|
333
|
+
"text/plain": [
|
334
|
+
"Level 1: 0%| | 0/36 [00:00<?, ?it/s]"
|
335
|
+
]
|
336
|
+
},
|
337
|
+
"metadata": {},
|
338
|
+
"output_type": "display_data"
|
339
|
+
},
|
340
|
+
{
|
341
|
+
"data": {
|
342
|
+
"application/vnd.jupyter.widget-view+json": {
|
343
|
+
"model_id": "8eaf22a6049c40ecb9aae089f4aa5dd1",
|
344
|
+
"version_major": 2,
|
345
|
+
"version_minor": 0
|
346
|
+
},
|
347
|
+
"text/plain": [
|
348
|
+
"Level 1: 0%| | 0/35 [00:00<?, ?it/s]"
|
349
|
+
]
|
350
|
+
},
|
351
|
+
"metadata": {},
|
352
|
+
"output_type": "display_data"
|
353
|
+
},
|
354
|
+
{
|
355
|
+
"data": {
|
356
|
+
"application/vnd.jupyter.widget-view+json": {
|
357
|
+
"model_id": "3b73204501ab4bd1a3ddd79f432b0f33",
|
358
|
+
"version_major": 2,
|
359
|
+
"version_minor": 0
|
360
|
+
},
|
361
|
+
"text/plain": [
|
362
|
+
"Level 1: 0%| | 0/56 [00:00<?, ?it/s]"
|
363
|
+
]
|
364
|
+
},
|
365
|
+
"metadata": {},
|
366
|
+
"output_type": "display_data"
|
367
|
+
},
|
368
|
+
{
|
369
|
+
"data": {
|
370
|
+
"application/vnd.jupyter.widget-view+json": {
|
371
|
+
"model_id": "91ead49928b04d9e867b2afbfe3c4224",
|
372
|
+
"version_major": 2,
|
373
|
+
"version_minor": 0
|
374
|
+
},
|
375
|
+
"text/plain": [
|
376
|
+
"Level 1: 0%| | 0/20 [00:00<?, ?it/s]"
|
377
|
+
]
|
378
|
+
},
|
379
|
+
"metadata": {},
|
380
|
+
"output_type": "display_data"
|
381
|
+
},
|
382
|
+
{
|
383
|
+
"data": {
|
384
|
+
"application/vnd.jupyter.widget-view+json": {
|
385
|
+
"model_id": "47393b0b93f646a19e75a756a4943866",
|
386
|
+
"version_major": 2,
|
387
|
+
"version_minor": 0
|
388
|
+
},
|
389
|
+
"text/plain": [
|
390
|
+
"Level 1: 0%| | 0/63 [00:00<?, ?it/s]"
|
391
|
+
]
|
392
|
+
},
|
393
|
+
"metadata": {},
|
394
|
+
"output_type": "display_data"
|
395
|
+
},
|
396
|
+
{
|
397
|
+
"data": {
|
398
|
+
"text/plain": [
|
399
|
+
"115373"
|
400
|
+
]
|
401
|
+
},
|
402
|
+
"execution_count": 19,
|
403
|
+
"metadata": {},
|
404
|
+
"output_type": "execute_result"
|
405
|
+
}
|
406
|
+
],
|
407
|
+
"source": [
|
408
|
+
"\n",
|
409
|
+
"komi.count_solutions(limits=None,progressLevel=2)\n",
|
410
|
+
"# andere grenzen als ´None´ sind nicht implementiert\n"
|
411
|
+
]
|
412
|
+
}
|
413
|
+
],
|
414
|
+
"metadata": {
|
415
|
+
"kernelspec": {
|
416
|
+
"display_name": ".venv",
|
417
|
+
"language": "python",
|
418
|
+
"name": "python3"
|
419
|
+
},
|
420
|
+
"language_info": {
|
421
|
+
"codemirror_mode": {
|
422
|
+
"name": "ipython",
|
423
|
+
"version": 3
|
424
|
+
},
|
425
|
+
"file_extension": ".py",
|
426
|
+
"mimetype": "text/x-python",
|
427
|
+
"name": "python",
|
428
|
+
"nbconvert_exporter": "python",
|
429
|
+
"pygments_lexer": "ipython3",
|
430
|
+
"version": "3.11.11"
|
431
|
+
}
|
432
|
+
},
|
433
|
+
"nbformat": 4,
|
434
|
+
"nbformat_minor": 5
|
435
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
*
|
File without changes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
```{python}
|
3
|
+
! which python
|
4
|
+
```
|
5
|
+
|
6
|
+
```{python}
|
7
|
+
from tilingpuzzles.solvers.komino import KominoSolverUnlimted
|
8
|
+
from tilingpuzzles.examples.rectangularPentomino import rectangularPentomino
|
9
|
+
from tilingpuzzles.games.stone import Stone
|
10
|
+
from tilingpuzzles.games.komino import Komino
|
11
|
+
|
12
|
+
|
13
|
+
T="""
|
14
|
+
########################
|
15
|
+
## ## ## ## # #
|
16
|
+
## ## ## ## # #
|
17
|
+
########################
|
18
|
+
########################
|
19
|
+
# ##
|
20
|
+
"""
|
21
|
+
T=Stone.from_string(T)
|
22
|
+
k =Komino(T,k=5)
|
23
|
+
|
24
|
+
solver = KominoSolverUnlimted(k)
|
25
|
+
|
26
|
+
res=solver.solve(2,3)
|
27
|
+
print(res)
|
28
|
+
len(solver.DP)
|
29
|
+
```
|
30
|
+
|
31
|
+
```{python}
|
32
|
+
res/len(solver.DP)
|
33
|
+
```
|
34
|
+
|
35
|
+
```{python}
|
36
|
+
k=rectangularPentomino.P5x12()
|
37
|
+
|
38
|
+
solver=KominoSolverUnlimted(k)
|
39
|
+
|
40
|
+
res=solver.solve()
|
41
|
+
print(res)
|
42
|
+
len(solver.DP)
|
43
|
+
```
|