puzzle-solvers

Assorted solvers for various puzzles

git clone https://code.pdelong.com/puzzle-solvers.git

  1package solver
  2
  3var neighbors = [81][20]int{
  4	{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 27, 36, 45, 54, 63, 72},
  5	{0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 28, 37, 46, 55, 64, 73},
  6	{0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 29, 38, 47, 56, 65, 74},
  7	{0, 1, 2, 4, 5, 6, 7, 8, 12, 13, 14, 21, 22, 23, 30, 39, 48, 57, 66, 75},
  8	{0, 1, 2, 3, 5, 6, 7, 8, 12, 13, 14, 21, 22, 23, 31, 40, 49, 58, 67, 76},
  9	{0, 1, 2, 3, 4, 6, 7, 8, 12, 13, 14, 21, 22, 23, 32, 41, 50, 59, 68, 77},
 10	{0, 1, 2, 3, 4, 5, 7, 8, 15, 16, 17, 24, 25, 26, 33, 42, 51, 60, 69, 78},
 11	{0, 1, 2, 3, 4, 5, 6, 8, 15, 16, 17, 24, 25, 26, 34, 43, 52, 61, 70, 79},
 12	{0, 1, 2, 3, 4, 5, 6, 7, 15, 16, 17, 24, 25, 26, 35, 44, 53, 62, 71, 80},
 13	{0, 1, 2, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 27, 36, 45, 54, 63, 72},
 14	{0, 1, 2, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 28, 37, 46, 55, 64, 73},
 15	{0, 1, 2, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 29, 38, 47, 56, 65, 74},
 16	{3, 4, 5, 9, 10, 11, 13, 14, 15, 16, 17, 21, 22, 23, 30, 39, 48, 57, 66, 75},
 17	{3, 4, 5, 9, 10, 11, 12, 14, 15, 16, 17, 21, 22, 23, 31, 40, 49, 58, 67, 76},
 18	{3, 4, 5, 9, 10, 11, 12, 13, 15, 16, 17, 21, 22, 23, 32, 41, 50, 59, 68, 77},
 19	{6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 24, 25, 26, 33, 42, 51, 60, 69, 78},
 20	{6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 24, 25, 26, 34, 43, 52, 61, 70, 79},
 21	{6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 24, 25, 26, 35, 44, 53, 62, 71, 80},
 22	{0, 1, 2, 9, 10, 11, 19, 20, 21, 22, 23, 24, 25, 26, 27, 36, 45, 54, 63, 72},
 23	{0, 1, 2, 9, 10, 11, 18, 20, 21, 22, 23, 24, 25, 26, 28, 37, 46, 55, 64, 73},
 24	{0, 1, 2, 9, 10, 11, 18, 19, 21, 22, 23, 24, 25, 26, 29, 38, 47, 56, 65, 74},
 25	{3, 4, 5, 12, 13, 14, 18, 19, 20, 22, 23, 24, 25, 26, 30, 39, 48, 57, 66, 75},
 26	{3, 4, 5, 12, 13, 14, 18, 19, 20, 21, 23, 24, 25, 26, 31, 40, 49, 58, 67, 76},
 27	{3, 4, 5, 12, 13, 14, 18, 19, 20, 21, 22, 24, 25, 26, 32, 41, 50, 59, 68, 77},
 28	{6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 33, 42, 51, 60, 69, 78},
 29	{6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 34, 43, 52, 61, 70, 79},
 30	{6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 35, 44, 53, 62, 71, 80},
 31	{0, 9, 18, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 45, 46, 47, 54, 63, 72},
 32	{1, 10, 19, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 45, 46, 47, 55, 64, 73},
 33	{2, 11, 20, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 45, 46, 47, 56, 65, 74},
 34	{3, 12, 21, 27, 28, 29, 31, 32, 33, 34, 35, 39, 40, 41, 48, 49, 50, 57, 66, 75},
 35	{4, 13, 22, 27, 28, 29, 30, 32, 33, 34, 35, 39, 40, 41, 48, 49, 50, 58, 67, 76},
 36	{5, 14, 23, 27, 28, 29, 30, 31, 33, 34, 35, 39, 40, 41, 48, 49, 50, 59, 68, 77},
 37	{6, 15, 24, 27, 28, 29, 30, 31, 32, 34, 35, 42, 43, 44, 51, 52, 53, 60, 69, 78},
 38	{7, 16, 25, 27, 28, 29, 30, 31, 32, 33, 35, 42, 43, 44, 51, 52, 53, 61, 70, 79},
 39	{8, 17, 26, 27, 28, 29, 30, 31, 32, 33, 34, 42, 43, 44, 51, 52, 53, 62, 71, 80},
 40	{0, 9, 18, 27, 28, 29, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 54, 63, 72},
 41	{1, 10, 19, 27, 28, 29, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 55, 64, 73},
 42	{2, 11, 20, 27, 28, 29, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 56, 65, 74},
 43	{3, 12, 21, 30, 31, 32, 36, 37, 38, 40, 41, 42, 43, 44, 48, 49, 50, 57, 66, 75},
 44	{4, 13, 22, 30, 31, 32, 36, 37, 38, 39, 41, 42, 43, 44, 48, 49, 50, 58, 67, 76},
 45	{5, 14, 23, 30, 31, 32, 36, 37, 38, 39, 40, 42, 43, 44, 48, 49, 50, 59, 68, 77},
 46	{6, 15, 24, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 51, 52, 53, 60, 69, 78},
 47	{7, 16, 25, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 51, 52, 53, 61, 70, 79},
 48	{8, 17, 26, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 51, 52, 53, 62, 71, 80},
 49	{0, 9, 18, 27, 28, 29, 36, 37, 38, 46, 47, 48, 49, 50, 51, 52, 53, 54, 63, 72},
 50	{1, 10, 19, 27, 28, 29, 36, 37, 38, 45, 47, 48, 49, 50, 51, 52, 53, 55, 64, 73},
 51	{2, 11, 20, 27, 28, 29, 36, 37, 38, 45, 46, 48, 49, 50, 51, 52, 53, 56, 65, 74},
 52	{3, 12, 21, 30, 31, 32, 39, 40, 41, 45, 46, 47, 49, 50, 51, 52, 53, 57, 66, 75},
 53	{4, 13, 22, 30, 31, 32, 39, 40, 41, 45, 46, 47, 48, 50, 51, 52, 53, 58, 67, 76},
 54	{5, 14, 23, 30, 31, 32, 39, 40, 41, 45, 46, 47, 48, 49, 51, 52, 53, 59, 68, 77},
 55	{6, 15, 24, 33, 34, 35, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 60, 69, 78},
 56	{7, 16, 25, 33, 34, 35, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 61, 70, 79},
 57	{8, 17, 26, 33, 34, 35, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 62, 71, 80},
 58	{0, 9, 18, 27, 36, 45, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 72, 73, 74},
 59	{1, 10, 19, 28, 37, 46, 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 72, 73, 74},
 60	{2, 11, 20, 29, 38, 47, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 72, 73, 74},
 61	{3, 12, 21, 30, 39, 48, 54, 55, 56, 58, 59, 60, 61, 62, 66, 67, 68, 75, 76, 77},
 62	{4, 13, 22, 31, 40, 49, 54, 55, 56, 57, 59, 60, 61, 62, 66, 67, 68, 75, 76, 77},
 63	{5, 14, 23, 32, 41, 50, 54, 55, 56, 57, 58, 60, 61, 62, 66, 67, 68, 75, 76, 77},
 64	{6, 15, 24, 33, 42, 51, 54, 55, 56, 57, 58, 59, 61, 62, 69, 70, 71, 78, 79, 80},
 65	{7, 16, 25, 34, 43, 52, 54, 55, 56, 57, 58, 59, 60, 62, 69, 70, 71, 78, 79, 80},
 66	{8, 17, 26, 35, 44, 53, 54, 55, 56, 57, 58, 59, 60, 61, 69, 70, 71, 78, 79, 80},
 67	{0, 9, 18, 27, 36, 45, 54, 55, 56, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74},
 68	{1, 10, 19, 28, 37, 46, 54, 55, 56, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74},
 69	{2, 11, 20, 29, 38, 47, 54, 55, 56, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74},
 70	{3, 12, 21, 30, 39, 48, 57, 58, 59, 63, 64, 65, 67, 68, 69, 70, 71, 75, 76, 77},
 71	{4, 13, 22, 31, 40, 49, 57, 58, 59, 63, 64, 65, 66, 68, 69, 70, 71, 75, 76, 77},
 72	{5, 14, 23, 32, 41, 50, 57, 58, 59, 63, 64, 65, 66, 67, 69, 70, 71, 75, 76, 77},
 73	{6, 15, 24, 33, 42, 51, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 78, 79, 80},
 74	{7, 16, 25, 34, 43, 52, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 78, 79, 80},
 75	{8, 17, 26, 35, 44, 53, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 78, 79, 80},
 76	{0, 9, 18, 27, 36, 45, 54, 55, 56, 63, 64, 65, 73, 74, 75, 76, 77, 78, 79, 80},
 77	{1, 10, 19, 28, 37, 46, 54, 55, 56, 63, 64, 65, 72, 74, 75, 76, 77, 78, 79, 80},
 78	{2, 11, 20, 29, 38, 47, 54, 55, 56, 63, 64, 65, 72, 73, 75, 76, 77, 78, 79, 80},
 79	{3, 12, 21, 30, 39, 48, 57, 58, 59, 66, 67, 68, 72, 73, 74, 76, 77, 78, 79, 80},
 80	{4, 13, 22, 31, 40, 49, 57, 58, 59, 66, 67, 68, 72, 73, 74, 75, 77, 78, 79, 80},
 81	{5, 14, 23, 32, 41, 50, 57, 58, 59, 66, 67, 68, 72, 73, 74, 75, 76, 78, 79, 80},
 82	{6, 15, 24, 33, 42, 51, 60, 61, 62, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80},
 83	{7, 16, 25, 34, 43, 52, 60, 61, 62, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80},
 84	{8, 17, 26, 35, 44, 53, 60, 61, 62, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79},
 85}
 86
 87var units = [27][9]int{
 88	{0, 1, 2, 3, 4, 5, 6, 7, 8},
 89	{9, 10, 11, 12, 13, 14, 15, 16, 17},
 90	{18, 19, 20, 21, 22, 23, 24, 25, 26},
 91	{27, 28, 29, 30, 31, 32, 33, 34, 35},
 92	{36, 37, 38, 39, 40, 41, 42, 43, 44},
 93	{45, 46, 47, 48, 49, 50, 51, 52, 53},
 94	{54, 55, 56, 57, 58, 59, 60, 61, 62},
 95	{63, 64, 65, 66, 67, 68, 69, 70, 71},
 96	{72, 73, 74, 75, 76, 77, 78, 79, 80},
 97	{0, 9, 18, 27, 36, 45, 54, 63, 72},
 98	{1, 10, 19, 28, 37, 46, 55, 64, 73},
 99	{2, 11, 20, 29, 38, 47, 56, 65, 74},
100	{3, 12, 21, 30, 39, 48, 57, 66, 75},
101	{4, 13, 22, 31, 40, 49, 58, 67, 76},
102	{5, 14, 23, 32, 41, 50, 59, 68, 77},
103	{6, 15, 24, 33, 42, 51, 60, 69, 78},
104	{7, 16, 25, 34, 43, 52, 61, 70, 79},
105	{8, 17, 26, 35, 44, 53, 62, 71, 80},
106	{0, 1, 2, 9, 10, 11, 18, 19, 20},
107	{3, 4, 5, 12, 13, 14, 21, 22, 23},
108	{6, 7, 8, 15, 16, 17, 24, 25, 26},
109	{27, 28, 29, 36, 37, 38, 45, 46, 47},
110	{30, 31, 32, 39, 40, 41, 48, 49, 50},
111	{33, 34, 35, 42, 43, 44, 51, 52, 53},
112	{54, 55, 56, 63, 64, 65, 72, 73, 74},
113	{57, 58, 59, 66, 67, 68, 75, 76, 77},
114	{60, 61, 62, 69, 70, 71, 78, 79, 80},
115}
116var affectedUnits = [81][3]int{
117	{0, 9, 18},
118	{0, 10, 18},
119	{0, 11, 18},
120	{0, 12, 19},
121	{0, 13, 19},
122	{0, 14, 19},
123	{0, 15, 20},
124	{0, 16, 20},
125	{0, 17, 20},
126	{1, 9, 18},
127	{1, 10, 18},
128	{1, 11, 18},
129	{1, 12, 19},
130	{1, 13, 19},
131	{1, 14, 19},
132	{1, 15, 20},
133	{1, 16, 20},
134	{1, 17, 20},
135	{2, 9, 18},
136	{2, 10, 18},
137	{2, 11, 18},
138	{2, 12, 19},
139	{2, 13, 19},
140	{2, 14, 19},
141	{2, 15, 20},
142	{2, 16, 20},
143	{2, 17, 20},
144	{3, 9, 21},
145	{3, 10, 21},
146	{3, 11, 21},
147	{3, 12, 22},
148	{3, 13, 22},
149	{3, 14, 22},
150	{3, 15, 23},
151	{3, 16, 23},
152	{3, 17, 23},
153	{4, 9, 21},
154	{4, 10, 21},
155	{4, 11, 21},
156	{4, 12, 22},
157	{4, 13, 22},
158	{4, 14, 22},
159	{4, 15, 23},
160	{4, 16, 23},
161	{4, 17, 23},
162	{5, 9, 21},
163	{5, 10, 21},
164	{5, 11, 21},
165	{5, 12, 22},
166	{5, 13, 22},
167	{5, 14, 22},
168	{5, 15, 23},
169	{5, 16, 23},
170	{5, 17, 23},
171	{6, 9, 24},
172	{6, 10, 24},
173	{6, 11, 24},
174	{6, 12, 25},
175	{6, 13, 25},
176	{6, 14, 25},
177	{6, 15, 26},
178	{6, 16, 26},
179	{6, 17, 26},
180	{7, 9, 24},
181	{7, 10, 24},
182	{7, 11, 24},
183	{7, 12, 25},
184	{7, 13, 25},
185	{7, 14, 25},
186	{7, 15, 26},
187	{7, 16, 26},
188	{7, 17, 26},
189	{8, 9, 24},
190	{8, 10, 24},
191	{8, 11, 24},
192	{8, 12, 25},
193	{8, 13, 25},
194	{8, 14, 25},
195	{8, 15, 26},
196	{8, 16, 26},
197	{8, 17, 26},
198}