binary_puzzle_solver 0.0.4 → 0.0.5
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.
- data/bin/binary-puzzle-solve +2 -0
- data/lib/binary_puzzle_solver/base.rb +219 -53
- data/lib/binary_puzzle_solver/version.rb +1 -1
- data/test/data/boards/binarypuzzle.com/numbered/10x10/easy/1/final.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/10x10/easy/1/initial.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/1/final.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/1/initial.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/2/final.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/2/initial.binpuz-board.txt +10 -0
- data/test/data/boards/binarypuzzle.com/numbered/12x12/hard/1/final.binpuz-board.txt +12 -0
- data/test/data/boards/binarypuzzle.com/numbered/12x12/hard/1/initial.binpuz-board.txt +12 -0
- data/test/data/boards/binarypuzzle.com/numbered/12x12/very_hard/1/initial.binpuz-board.txt +12 -0
- data/test/data/boards/binarypuzzle.com/numbered/12x12/very_hard/1/intermediate_1.binpuz-board.txt +12 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/final.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/initial.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/intermediate_1.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/intermediate_2.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/2/final.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/2/initial.binpuz-board.txt +14 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/1/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/1/intermediate_1.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/2/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/2/intermediate_1.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/final.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/intermediate.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/intermediate.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/intermediate_2.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/3/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/3/intermediate.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/after_cells_of_one_value_in_row_were_all_found.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/after_easy_moves.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/final.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/final.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/intermediate_1.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/2/final.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/2/initial.binpuz-board.txt +6 -0
- data/test/data/boards/binarypuzzle.com/numbered/8x8/easy/1/final.binpuz-board.txt +8 -0
- data/test/data/boards/binarypuzzle.com/numbered/8x8/easy/1/initial.binpuz-board.txt +8 -0
- data/test/data/boards/binarypuzzle.com/numbered/8x8/medium/1/final.binpuz-board.txt +8 -0
- data/test/data/boards/binarypuzzle.com/numbered/8x8/medium/1/initial.binpuz-board.txt +8 -0
- data/test/deduction.rb +190 -388
- metadata +84 -2
@@ -0,0 +1,14 @@
|
|
1
|
+
|01011010101001|
|
2
|
+
|10011001010101|
|
3
|
+
|10100110101010|
|
4
|
+
|01100110011001|
|
5
|
+
|01011001100101|
|
6
|
+
|10011011001010|
|
7
|
+
|01100100110110|
|
8
|
+
|00110011010101|
|
9
|
+
|11001101001010|
|
10
|
+
|00101100110101|
|
11
|
+
|10110010110010|
|
12
|
+
|11001001001101|
|
13
|
+
|01100110100110|
|
14
|
+
|10010101011010|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|10011011001100|
|
2
|
+
|01010101100110|
|
3
|
+
|00100110110011|
|
4
|
+
|11001001011001|
|
5
|
+
|10110010100110|
|
6
|
+
|00100110011011|
|
7
|
+
|11011001001001|
|
8
|
+
|00101010110110|
|
9
|
+
|11010100100110|
|
10
|
+
|00101101011001|
|
11
|
+
|01101011001001|
|
12
|
+
|10010010110110|
|
13
|
+
|11010101001001|
|
14
|
+
|01101100110100|
|
data/test/deduction.rb
CHANGED
@@ -63,487 +63,189 @@ def compare_boards(got, expected)
|
|
63
63
|
return
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
66
|
+
def get_binarypuzzle_com_numbered_puzzle(params)
|
67
|
+
return Binary_Puzzle_Solver.gen_board_from_string_v1(
|
68
|
+
IO.read(
|
69
|
+
File.join(
|
70
|
+
'test', 'data', 'boards', 'binarypuzzle.com', 'numbered',
|
71
|
+
params[:size],
|
72
|
+
params[:difficulty],
|
73
|
+
params[:number],
|
74
|
+
"#{params[:stage]}.binpuz-board.txt"
|
75
|
+
)
|
76
|
+
)
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_6x6_easy_board_1__initial()
|
81
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "easy", :number => "1", :stage => "initial");
|
76
82
|
end
|
77
83
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|101010|
|
81
|
-
|010011|
|
82
|
-
|100101|
|
83
|
-
|011010|
|
84
|
-
|001101|
|
85
|
-
|110100|
|
86
|
-
EOF
|
87
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(str)
|
84
|
+
def get_6x6_easy_board_1__intermediate_1()
|
85
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "easy", :number => "1", :stage => "intermediate_1");
|
88
86
|
end
|
89
87
|
|
90
|
-
def
|
91
|
-
|
92
|
-
| 0 1|
|
93
|
-
|1 00 |
|
94
|
-
| 1 |
|
95
|
-
| 1 |
|
96
|
-
| 1 0|
|
97
|
-
|00 1 |
|
98
|
-
EOF
|
99
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
88
|
+
def get_6x6_easy_board_2__initial()
|
89
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "easy", :number => "2", :stage => "initial");
|
100
90
|
end
|
101
91
|
|
102
|
-
def
|
103
|
-
|
104
|
-
|100101|
|
105
|
-
|110010|
|
106
|
-
|011001|
|
107
|
-
|100110|
|
108
|
-
|011010|
|
109
|
-
|001101|
|
110
|
-
EOF
|
111
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
92
|
+
def get_6x6_easy_board_2__intermediate_1()
|
93
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "easy", :number => "2", :stage => "intermediate_1");
|
112
94
|
end
|
113
95
|
|
114
|
-
def
|
115
|
-
|
116
|
-
| 00|
|
117
|
-
| |
|
118
|
-
| 1 |
|
119
|
-
|01 1 |
|
120
|
-
|0 0 |
|
121
|
-
| 1 |
|
122
|
-
EOF
|
123
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
96
|
+
def get_6x6_medium_board_1__initial()
|
97
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "medium", :number => "1", :stage => "initial");
|
124
98
|
end
|
125
99
|
|
126
100
|
def get_6x6_medium_board_1__after_easy_moves()
|
127
|
-
|
128
|
-
| 100|
|
129
|
-
| 01 |
|
130
|
-
|110 |
|
131
|
-
|0101 |
|
132
|
-
|001 0 |
|
133
|
-
|101 |
|
134
|
-
EOF
|
135
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
101
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "medium", :number => "1", :stage => "after_easy_moves");
|
136
102
|
end
|
137
103
|
|
138
104
|
def get_6x6_medium_board_1__after_cells_of_one_value_in_row_were_all_found()
|
139
|
-
|
140
|
-
|110100|
|
141
|
-
|001011|
|
142
|
-
|1100 |
|
143
|
-
|0101 |
|
144
|
-
|001101|
|
145
|
-
|1010 |
|
146
|
-
EOF
|
147
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
105
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "medium", :number => "1", :stage => "after_cells_of_one_value_in_row_were_all_found");
|
148
106
|
end
|
149
107
|
|
150
108
|
def get_6x6_medium_board_1__final()
|
151
|
-
|
152
|
-
|110100|
|
153
|
-
|001011|
|
154
|
-
|110010|
|
155
|
-
|010101|
|
156
|
-
|001101|
|
157
|
-
|101010|
|
158
|
-
EOF
|
159
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
109
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "medium", :number => "1", :stage => "final");
|
160
110
|
end
|
161
111
|
|
162
112
|
def get_8x8_easy_board_1__initial()
|
163
|
-
|
164
|
-
| 0|
|
165
|
-
| 00 1 |
|
166
|
-
| 0 1 0|
|
167
|
-
| 1 |
|
168
|
-
|00 1 1 |
|
169
|
-
| 1 |
|
170
|
-
|11 0 1|
|
171
|
-
| 1 1|
|
172
|
-
EOF
|
173
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
113
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "8x8", :difficulty => "easy", :number => "1", :stage => "initial");
|
174
114
|
end
|
175
115
|
|
176
116
|
def get_8x8_easy_board_1__final()
|
177
|
-
|
178
|
-
|01101010|
|
179
|
-
|10010101|
|
180
|
-
|10010110|
|
181
|
-
|01101001|
|
182
|
-
|00110110|
|
183
|
-
|10011010|
|
184
|
-
|11001001|
|
185
|
-
|01100101|
|
186
|
-
EOF
|
187
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
117
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "8x8", :difficulty => "easy", :number => "1", :stage => "final");
|
188
118
|
end
|
189
119
|
|
190
120
|
def get_8x8_medium_board_1__initial()
|
191
|
-
|
192
|
-
| 0 0 |
|
193
|
-
|0 0 0 0 |
|
194
|
-
| |
|
195
|
-
| 1 1 |
|
196
|
-
|0 0 |
|
197
|
-
|0 00 |
|
198
|
-
| 1|
|
199
|
-
| 1 1 |
|
200
|
-
EOF
|
201
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
121
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "8x8", :difficulty => "medium", :number => "1", :stage => "initial");
|
202
122
|
end
|
203
123
|
|
204
124
|
def get_8x8_medium_board_1__final()
|
205
|
-
|
206
|
-
|10100101|
|
207
|
-
|01010101|
|
208
|
-
|10101010|
|
209
|
-
|10011010|
|
210
|
-
|01100101|
|
211
|
-
|01100110|
|
212
|
-
|10011001|
|
213
|
-
|01011010|
|
214
|
-
EOF
|
215
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
125
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "8x8", :difficulty => "medium", :number => "1", :stage => "final");
|
216
126
|
end
|
217
127
|
|
218
128
|
def get_6x6_hard_board_1__initial()
|
219
|
-
|
220
|
-
| 1 |
|
221
|
-
| 0 1|
|
222
|
-
|0 0 |
|
223
|
-
| 11 |
|
224
|
-
| |
|
225
|
-
|1 0 |
|
226
|
-
EOF
|
227
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
129
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "1", :stage => "initial");
|
228
130
|
end
|
229
131
|
|
230
132
|
def get_6x6_hard_board_1__intermediate()
|
231
|
-
|
232
|
-
|0 1 |
|
233
|
-
|1 0 1|
|
234
|
-
|0 0 |
|
235
|
-
|0110 |
|
236
|
-
|1 |
|
237
|
-
|1 0 |
|
238
|
-
EOF
|
239
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
133
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "1", :stage => "intermediate");
|
240
134
|
end
|
241
135
|
|
242
136
|
def get_6x6_hard_board_1__final()
|
243
|
-
|
244
|
-
|010110|
|
245
|
-
|100101|
|
246
|
-
|011001|
|
247
|
-
|011010|
|
248
|
-
|100110|
|
249
|
-
|101001|
|
250
|
-
EOF
|
251
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
137
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "1", :stage => "final");
|
252
138
|
end
|
253
139
|
|
254
140
|
def get_6x6_hard_board_2__initial()
|
255
|
-
|
256
|
-
| 11 1|
|
257
|
-
|00 |
|
258
|
-
| |
|
259
|
-
| 1 0|
|
260
|
-
| |
|
261
|
-
| 0 |
|
262
|
-
EOF
|
263
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
141
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "2", :stage => "initial");
|
264
142
|
end
|
265
143
|
|
266
144
|
def get_6x6_hard_board_2__intermediate()
|
267
|
-
|
268
|
-
|011001|
|
269
|
-
|001 |
|
270
|
-
|1 0 |
|
271
|
-
| 1 0|
|
272
|
-
| 0 |
|
273
|
-
| 1001 |
|
274
|
-
EOF
|
275
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
145
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "2", :stage => "intermediate");
|
276
146
|
end
|
277
147
|
|
278
148
|
def get_6x6_hard_board_2__intermediate_2()
|
279
|
-
|
280
|
-
|011001|
|
281
|
-
|001101|
|
282
|
-
|100110|
|
283
|
-
|011010|
|
284
|
-
|100101|
|
285
|
-
|110010|
|
286
|
-
EOF
|
287
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
149
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "2", :stage => "intermediate_2");
|
288
150
|
end
|
289
151
|
|
290
152
|
def get_6x6_hard_board_3__initial()
|
291
|
-
|
292
|
-
|1 0 0|
|
293
|
-
| |
|
294
|
-
| 11 |
|
295
|
-
| 1 1 |
|
296
|
-
| 0|
|
297
|
-
| 01 |
|
298
|
-
EOF
|
299
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
153
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "3", :stage => "initial");
|
300
154
|
end
|
301
155
|
|
302
156
|
def get_6x6_hard_board_3__intermediate()
|
303
|
-
|
304
|
-
|100110|
|
305
|
-
|101001|
|
306
|
-
|011001|
|
307
|
-
|010110|
|
308
|
-
|101010|
|
309
|
-
|010101|
|
310
|
-
EOF
|
311
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
157
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "hard", :number => "3", :stage => "intermediate");
|
312
158
|
end
|
313
159
|
|
314
160
|
def get_10x10_easy_board_1__initial()
|
315
|
-
|
316
|
-
| 1 |
|
317
|
-
| 00 0 1 |
|
318
|
-
| 0 1 0 0|
|
319
|
-
| 1 1 |
|
320
|
-
|1 1 1|
|
321
|
-
| 1 |
|
322
|
-
| 0 1 0 |
|
323
|
-
| 11 0|
|
324
|
-
| 0 0 1 0|
|
325
|
-
|0 0 1 |
|
326
|
-
EOF
|
327
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
161
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "easy", :number => "1", :stage => "initial");
|
328
162
|
end
|
329
163
|
|
330
164
|
def get_10x10_easy_board_1__final()
|
331
|
-
|
332
|
-
|0110010101|
|
333
|
-
|1001100110|
|
334
|
-
|1001101010|
|
335
|
-
|0110011001|
|
336
|
-
|1010100101|
|
337
|
-
|0101010110|
|
338
|
-
|1001101001|
|
339
|
-
|0110110100|
|
340
|
-
|1010011010|
|
341
|
-
|0101001011|
|
342
|
-
EOF
|
343
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
165
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "easy", :number => "1", :stage => "final");
|
344
166
|
end
|
345
167
|
|
346
168
|
|
347
169
|
def get_10x10_hard_board_1__initial()
|
348
|
-
|
349
|
-
| 0 |
|
350
|
-
|0 0 1 |
|
351
|
-
| 1 |
|
352
|
-
| 0 0|
|
353
|
-
|1 00 1 |
|
354
|
-
| |
|
355
|
-
| 0 1 1 |
|
356
|
-
|1 11|
|
357
|
-
| 0 |
|
358
|
-
|1 1 1 1 |
|
359
|
-
EOF
|
360
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
170
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "hard", :number => "1", :stage => "initial");
|
361
171
|
end
|
362
172
|
|
363
173
|
def get_10x10_hard_board_1__final()
|
364
|
-
|
365
|
-
|1101100100|
|
366
|
-
|0101011001|
|
367
|
-
|0010101011|
|
368
|
-
|1011010100|
|
369
|
-
|1100110010|
|
370
|
-
|0011001101|
|
371
|
-
|0100110110|
|
372
|
-
|1001001011|
|
373
|
-
|0110010101|
|
374
|
-
|1010101010|
|
375
|
-
EOF
|
376
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
174
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "hard", :number => "1", :stage => "final");
|
377
175
|
end
|
378
176
|
|
379
177
|
def get_10x10_hard_board_2__initial()
|
380
|
-
|
381
|
-
| 0 1 0|
|
382
|
-
| 1 1 0 |
|
383
|
-
| 0 10 |
|
384
|
-
| 0 |
|
385
|
-
| 0 |
|
386
|
-
| 1 0|
|
387
|
-
| 1 0 |
|
388
|
-
| 0 0 |
|
389
|
-
| 00 0 0|
|
390
|
-
| 0 1 0 |
|
391
|
-
EOF
|
392
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
178
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "hard", :number => "2", :stage => "initial");
|
393
179
|
end
|
394
180
|
|
395
181
|
def get_10x10_hard_board_2__final()
|
396
|
-
|
397
|
-
|0110011010|
|
398
|
-
|0110100101|
|
399
|
-
|1001010101|
|
400
|
-
|1001101010|
|
401
|
-
|0110010101|
|
402
|
-
|1011001010|
|
403
|
-
|0101100110|
|
404
|
-
|0010110101|
|
405
|
-
|1001011010|
|
406
|
-
|1100101001|
|
407
|
-
EOF
|
408
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
182
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "10x10", :difficulty => "hard", :number => "2", :stage => "final");
|
409
183
|
end
|
410
184
|
|
411
185
|
def get_12x12_hard_board_1__initial()
|
412
|
-
|
413
|
-
| 1 1 0|
|
414
|
-
| 0 1 1 |
|
415
|
-
| 1 0 0 0|
|
416
|
-
|00 1 |
|
417
|
-
| 00 0 |
|
418
|
-
| 0 0 1 |
|
419
|
-
| 00 0 0|
|
420
|
-
| 00 1 |
|
421
|
-
| 0 1 |
|
422
|
-
|00 0 |
|
423
|
-
| 00 |
|
424
|
-
|00 0 |
|
425
|
-
EOF
|
426
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
186
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "12x12", :difficulty => "hard", :number => "1", :stage => "initial");
|
427
187
|
end
|
428
188
|
|
429
189
|
def get_12x12_hard_board_1__final()
|
430
|
-
|
431
|
-
|011010101100|
|
432
|
-
|010100110011|
|
433
|
-
|101101010010|
|
434
|
-
|001011001101|
|
435
|
-
|110100110010|
|
436
|
-
|100100101101|
|
437
|
-
|011011001010|
|
438
|
-
|100101010101|
|
439
|
-
|110010110100|
|
440
|
-
|001011001011|
|
441
|
-
|110101100100|
|
442
|
-
|001010011011|
|
443
|
-
EOF
|
444
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
190
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "12x12", :difficulty => "hard", :number => "1", :stage => "final");
|
445
191
|
end
|
446
192
|
|
447
193
|
def get_6x6_very_hard_board_1__initial()
|
448
|
-
|
449
|
-
| 1 |
|
450
|
-
|00 1 |
|
451
|
-
|0 |
|
452
|
-
| |
|
453
|
-
| 1 |
|
454
|
-
| 0 |
|
455
|
-
EOF
|
456
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
194
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "very_hard", :number => "1", :stage => "initial");
|
457
195
|
end
|
458
196
|
|
459
197
|
def get_6x6_very_hard_board_1__intermediate_1()
|
460
|
-
|
461
|
-
|101010|
|
462
|
-
|001101|
|
463
|
-
|010011|
|
464
|
-
|1 010|
|
465
|
-
| 10 |
|
466
|
-
| 1010 |
|
467
|
-
EOF
|
468
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
198
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "very_hard", :number => "1", :stage => "intermediate_1");
|
469
199
|
end
|
470
200
|
|
471
201
|
def get_6x6_very_hard_board_1__final()
|
472
|
-
|
473
|
-
|101010|
|
474
|
-
|001101|
|
475
|
-
|010011|
|
476
|
-
|110010|
|
477
|
-
|101100|
|
478
|
-
|010101|
|
479
|
-
EOF
|
480
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
202
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "very_hard", :number => "1", :stage => "final");
|
481
203
|
end
|
482
204
|
|
483
205
|
def get_6x6_very_hard_board_2__initial()
|
484
|
-
|
485
|
-
| 0 |
|
486
|
-
| |
|
487
|
-
|1 |
|
488
|
-
| 0 0 |
|
489
|
-
|1 0 |
|
490
|
-
| 0 0|
|
491
|
-
EOF
|
492
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
206
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "very_hard", :number => "2", :stage => "initial");
|
493
207
|
end
|
494
208
|
|
495
209
|
def get_6x6_very_hard_board_2__final()
|
496
|
-
|
497
|
-
|001011|
|
498
|
-
|010011|
|
499
|
-
|110100|
|
500
|
-
|001101|
|
501
|
-
|110010|
|
502
|
-
|101100|
|
503
|
-
EOF
|
504
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
210
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "6x6", :difficulty => "very_hard", :number => "2", :stage => "final");
|
505
211
|
end
|
506
212
|
|
507
213
|
def get_12x12_very_hard_board_1__initial()
|
508
|
-
|
509
|
-
| 00 1 |
|
510
|
-
| 1 1 |
|
511
|
-
| 0 0 0 0|
|
512
|
-
| 0 |
|
513
|
-
| 11 1 1 0 |
|
514
|
-
| 11 0 00 |
|
515
|
-
| 1 |
|
516
|
-
|1 00 0 |
|
517
|
-
| |
|
518
|
-
| 1 1 |
|
519
|
-
| 0 0 0 0|
|
520
|
-
| 10 0 |
|
521
|
-
EOF
|
522
|
-
return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
|
214
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "12x12", :difficulty => "very_hard", :number => "1", :stage => "initial");
|
523
215
|
end
|
524
216
|
|
525
217
|
def get_12x12_very_hard_board_1__intermediate_1()
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
218
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "12x12", :difficulty => "very_hard", :number => "1", :stage => "intermediate_1");
|
219
|
+
end
|
220
|
+
|
221
|
+
def get_14x14_very_hard_board_1__initial()
|
222
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "1", :stage => "initial");
|
223
|
+
end
|
224
|
+
|
225
|
+
def get_14x14_very_hard_board_1__intermediate_1()
|
226
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "1", :stage => "intermediate_1");
|
227
|
+
end
|
228
|
+
|
229
|
+
def get_14x14_very_hard_board_1__intermediate_2()
|
230
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "1", :stage => "intermediate_2");
|
231
|
+
end
|
232
|
+
|
233
|
+
def get_14x14_very_hard_board_1__final()
|
234
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "1", :stage => "final");
|
235
|
+
end
|
236
|
+
|
237
|
+
def get_14x14_very_hard_board_2__initial()
|
238
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "2", :stage => "initial");
|
239
|
+
end
|
240
|
+
|
241
|
+
def get_14x14_very_hard_board_2__final()
|
242
|
+
return get_binarypuzzle_com_numbered_puzzle(:size => "14x14", :difficulty => "very_hard", :number => "2", :stage => "final");
|
541
243
|
end
|
542
244
|
|
543
245
|
describe "construct_board" do
|
544
246
|
it "6*6 Easy board No. 1 should" do
|
545
247
|
|
546
|
-
board =
|
248
|
+
board = get_6x6_easy_board_1__initial()
|
547
249
|
|
548
250
|
ONE = Binary_Puzzle_Solver::Cell::ONE
|
549
251
|
ZERO = Binary_Puzzle_Solver::Cell::ZERO
|
@@ -638,7 +340,7 @@ end
|
|
638
340
|
describe "rudimentary_deduction" do
|
639
341
|
it "6*6 Easy board No. 1 should" do
|
640
342
|
|
641
|
-
board =
|
343
|
+
board = get_6x6_easy_board_1__initial()
|
642
344
|
|
643
345
|
# ONE = Binary_Puzzle_Solver::Cell::ONE
|
644
346
|
# ZERO = Binary_Puzzle_Solver::Cell::ZERO
|
@@ -660,7 +362,7 @@ describe "rudimentary_deduction" do
|
|
660
362
|
|
661
363
|
it "6*6 Easy board No. 1 should" do
|
662
364
|
|
663
|
-
board =
|
365
|
+
board = get_6x6_easy_board_1__initial()
|
664
366
|
|
665
367
|
view = board.get_view(:rotate => true)
|
666
368
|
view.check_and_handle_sequences_in_row(:idx => 5)
|
@@ -678,7 +380,7 @@ describe "rudimentary_deduction" do
|
|
678
380
|
|
679
381
|
it "6*6 Easy board No. 1 should flush moves properly" do
|
680
382
|
|
681
|
-
board =
|
383
|
+
board = get_6x6_easy_board_1__initial()
|
682
384
|
|
683
385
|
# ONE = Binary_Puzzle_Solver::Cell::ONE
|
684
386
|
# ZERO = Binary_Puzzle_Solver::Cell::ZERO
|
@@ -699,7 +401,7 @@ describe "rudimentary_deduction" do
|
|
699
401
|
|
700
402
|
it "6*6 Easy board No. 1 should" do
|
701
403
|
|
702
|
-
board =
|
404
|
+
board = get_6x6_easy_board_1__initial()
|
703
405
|
|
704
406
|
# ONE = Binary_Puzzle_Solver::Cell::ONE
|
705
407
|
# ZERO = Binary_Puzzle_Solver::Cell::ZERO
|
@@ -737,7 +439,7 @@ describe "rudimentary_deduction" do
|
|
737
439
|
|
738
440
|
it "6*6 Easy board No. 1 should" do
|
739
441
|
|
740
|
-
board =
|
442
|
+
board = get_6x6_easy_board_1__initial()
|
741
443
|
|
742
444
|
# ONE = Binary_Puzzle_Solver::Cell::ONE
|
743
445
|
# ZERO = Binary_Puzzle_Solver::Cell::ZERO
|
@@ -764,7 +466,7 @@ describe "rudimentary_deduction" do
|
|
764
466
|
|
765
467
|
it "6*6 Easy process should" do
|
766
468
|
|
767
|
-
board =
|
469
|
+
board = get_6x6_easy_board_1__initial()
|
768
470
|
|
769
471
|
board.add_to_iters_quota(1_000_000_000);
|
770
472
|
|
@@ -777,11 +479,11 @@ describe "rudimentary_deduction" do
|
|
777
479
|
|
778
480
|
good_num_iters = board.num_iters_done()
|
779
481
|
|
780
|
-
final_board =
|
482
|
+
final_board = get_6x6_easy_board_1__intermediate_1()
|
781
483
|
|
782
484
|
compare_boards(board, final_board)
|
783
485
|
|
784
|
-
resume_board =
|
486
|
+
resume_board = get_6x6_easy_board_1__initial()
|
785
487
|
|
786
488
|
resume_board.add_to_iters_quota(10);
|
787
489
|
|
@@ -806,7 +508,7 @@ describe "rudimentary_deduction" do
|
|
806
508
|
|
807
509
|
it "Solving 6*6 Easy board No. 2 should" do
|
808
510
|
|
809
|
-
board =
|
511
|
+
board = get_6x6_easy_board_2__initial()
|
810
512
|
|
811
513
|
board.add_to_iters_quota(1_000_000_000);
|
812
514
|
|
@@ -817,14 +519,14 @@ describe "rudimentary_deduction" do
|
|
817
519
|
]
|
818
520
|
);
|
819
521
|
|
820
|
-
final_board =
|
522
|
+
final_board = get_6x6_easy_board_2__intermediate_1()
|
821
523
|
|
822
524
|
compare_boards(board, final_board)
|
823
525
|
end
|
824
526
|
|
825
527
|
it "Solving 6*6 Medium board No. 1 should" do
|
826
528
|
|
827
|
-
board =
|
529
|
+
board = get_6x6_medium_board_1__initial()
|
828
530
|
|
829
531
|
board.validate().should == :non_final
|
830
532
|
|
@@ -1184,4 +886,104 @@ describe "rudimentary_deduction" do
|
|
1184
886
|
|
1185
887
|
compare_boards(board, final_board)
|
1186
888
|
end
|
889
|
+
|
890
|
+
it "Solving 14*14 Very Hard board No. 1 should" do
|
891
|
+
|
892
|
+
board = get_14x14_very_hard_board_1__initial()
|
893
|
+
|
894
|
+
board.add_to_iters_quota(1_000_000_000);
|
895
|
+
|
896
|
+
board.try_to_solve_using(
|
897
|
+
:methods => [
|
898
|
+
:check_and_handle_sequences_in_row,
|
899
|
+
:check_and_handle_known_unknown_sameknown_in_row,
|
900
|
+
:check_and_handle_cells_of_one_value_in_row_were_all_found,
|
901
|
+
:check_exceeded_numbers_while_accounting_for_two_unknown_gaps,
|
902
|
+
:check_try_placing_last_of_certain_digit_in_row,
|
903
|
+
:check_try_placing_last_of_certain_digit_in_row_to_avoid_dups,
|
904
|
+
]
|
905
|
+
);
|
906
|
+
|
907
|
+
intermediate_board = get_14x14_very_hard_board_1__intermediate_1()
|
908
|
+
|
909
|
+
# binding.pry
|
910
|
+
|
911
|
+
compare_boards(board, intermediate_board)
|
912
|
+
|
913
|
+
board.try_to_solve_using(
|
914
|
+
:methods => [
|
915
|
+
:check_and_handle_sequences_in_row,
|
916
|
+
:check_and_handle_known_unknown_sameknown_in_row,
|
917
|
+
:check_and_handle_cells_of_one_value_in_row_were_all_found,
|
918
|
+
:check_exceeded_numbers_while_accounting_for_two_unknown_gaps,
|
919
|
+
:check_try_placing_last_of_certain_digit_in_row,
|
920
|
+
:check_try_placing_last_of_certain_digit_in_row_to_avoid_dups,
|
921
|
+
:check_remaining_gap_of_three_with_implicits,
|
922
|
+
]
|
923
|
+
);
|
924
|
+
|
925
|
+
board.get_cell_state(
|
926
|
+
Binary_Puzzle_Solver::Coord.new(:x => 4, :y => 5)
|
927
|
+
).should == ONE
|
928
|
+
board.get_cell_state(
|
929
|
+
Binary_Puzzle_Solver::Coord.new(:x => 6, :y => 5)
|
930
|
+
).should == ONE
|
931
|
+
|
932
|
+
intermediate_board = get_14x14_very_hard_board_1__intermediate_2()
|
933
|
+
|
934
|
+
compare_boards(board, intermediate_board)
|
935
|
+
|
936
|
+
board.try_to_solve_using(
|
937
|
+
:methods => [
|
938
|
+
:check_and_handle_sequences_in_row,
|
939
|
+
:check_and_handle_known_unknown_sameknown_in_row,
|
940
|
+
:check_and_handle_cells_of_one_value_in_row_were_all_found,
|
941
|
+
:check_exceeded_numbers_while_accounting_for_two_unknown_gaps,
|
942
|
+
:check_try_placing_last_of_certain_digit_in_row,
|
943
|
+
:check_try_placing_last_of_certain_digit_in_row_to_avoid_dups,
|
944
|
+
:check_remaining_gap_of_three_with_implicits,
|
945
|
+
:check_exceeded_digits_taking_large_gaps_into_account,
|
946
|
+
]
|
947
|
+
);
|
948
|
+
|
949
|
+
board.get_cell_state(
|
950
|
+
Binary_Puzzle_Solver::Coord.new(:x => 13, :y => 8)
|
951
|
+
).should == ZERO
|
952
|
+
board.get_cell_state(
|
953
|
+
Binary_Puzzle_Solver::Coord.new(:x => 13, :y => 13)
|
954
|
+
).should == ZERO
|
955
|
+
board.get_cell_state(
|
956
|
+
Binary_Puzzle_Solver::Coord.new(:x => 13, :y => 10)
|
957
|
+
).should == ZERO
|
958
|
+
|
959
|
+
final_board = get_14x14_very_hard_board_1__final()
|
960
|
+
|
961
|
+
compare_boards(board, final_board)
|
962
|
+
|
963
|
+
end
|
964
|
+
|
965
|
+
it "Solving 14*14 Very Hard board No. 2 should" do
|
966
|
+
|
967
|
+
board = get_14x14_very_hard_board_2__initial()
|
968
|
+
|
969
|
+
board.add_to_iters_quota(1_000_000_000);
|
970
|
+
|
971
|
+
board.try_to_solve_using(
|
972
|
+
:methods => [
|
973
|
+
:check_and_handle_sequences_in_row,
|
974
|
+
:check_and_handle_known_unknown_sameknown_in_row,
|
975
|
+
:check_and_handle_cells_of_one_value_in_row_were_all_found,
|
976
|
+
:check_exceeded_numbers_while_accounting_for_two_unknown_gaps,
|
977
|
+
:check_try_placing_last_of_certain_digit_in_row,
|
978
|
+
:check_try_placing_last_of_certain_digit_in_row_to_avoid_dups,
|
979
|
+
:check_remaining_gap_of_three_with_implicits,
|
980
|
+
:check_exceeded_digits_taking_large_gaps_into_account,
|
981
|
+
]
|
982
|
+
);
|
983
|
+
|
984
|
+
final_board = get_14x14_very_hard_board_2__final();
|
985
|
+
|
986
|
+
compare_boards(board, final_board)
|
987
|
+
|
988
|
+
end
|
1187
989
|
end
|