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.
Files changed (46) hide show
  1. data/bin/binary-puzzle-solve +2 -0
  2. data/lib/binary_puzzle_solver/base.rb +219 -53
  3. data/lib/binary_puzzle_solver/version.rb +1 -1
  4. data/test/data/boards/binarypuzzle.com/numbered/10x10/easy/1/final.binpuz-board.txt +10 -0
  5. data/test/data/boards/binarypuzzle.com/numbered/10x10/easy/1/initial.binpuz-board.txt +10 -0
  6. data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/1/final.binpuz-board.txt +10 -0
  7. data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/1/initial.binpuz-board.txt +10 -0
  8. data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/2/final.binpuz-board.txt +10 -0
  9. data/test/data/boards/binarypuzzle.com/numbered/10x10/hard/2/initial.binpuz-board.txt +10 -0
  10. data/test/data/boards/binarypuzzle.com/numbered/12x12/hard/1/final.binpuz-board.txt +12 -0
  11. data/test/data/boards/binarypuzzle.com/numbered/12x12/hard/1/initial.binpuz-board.txt +12 -0
  12. data/test/data/boards/binarypuzzle.com/numbered/12x12/very_hard/1/initial.binpuz-board.txt +12 -0
  13. data/test/data/boards/binarypuzzle.com/numbered/12x12/very_hard/1/intermediate_1.binpuz-board.txt +12 -0
  14. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/final.binpuz-board.txt +14 -0
  15. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/initial.binpuz-board.txt +14 -0
  16. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/intermediate_1.binpuz-board.txt +14 -0
  17. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/1/intermediate_2.binpuz-board.txt +14 -0
  18. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/2/final.binpuz-board.txt +14 -0
  19. data/test/data/boards/binarypuzzle.com/numbered/14x14/very_hard/2/initial.binpuz-board.txt +14 -0
  20. data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/1/initial.binpuz-board.txt +6 -0
  21. data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/1/intermediate_1.binpuz-board.txt +6 -0
  22. data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/2/initial.binpuz-board.txt +6 -0
  23. data/test/data/boards/binarypuzzle.com/numbered/6x6/easy/2/intermediate_1.binpuz-board.txt +6 -0
  24. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/final.binpuz-board.txt +6 -0
  25. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/initial.binpuz-board.txt +6 -0
  26. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/1/intermediate.binpuz-board.txt +6 -0
  27. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/initial.binpuz-board.txt +6 -0
  28. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/intermediate.binpuz-board.txt +6 -0
  29. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/2/intermediate_2.binpuz-board.txt +6 -0
  30. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/3/initial.binpuz-board.txt +6 -0
  31. data/test/data/boards/binarypuzzle.com/numbered/6x6/hard/3/intermediate.binpuz-board.txt +6 -0
  32. 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
  33. data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/after_easy_moves.binpuz-board.txt +6 -0
  34. data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/final.binpuz-board.txt +6 -0
  35. data/test/data/boards/binarypuzzle.com/numbered/6x6/medium/1/initial.binpuz-board.txt +6 -0
  36. data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/final.binpuz-board.txt +6 -0
  37. data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/initial.binpuz-board.txt +6 -0
  38. data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/1/intermediate_1.binpuz-board.txt +6 -0
  39. data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/2/final.binpuz-board.txt +6 -0
  40. data/test/data/boards/binarypuzzle.com/numbered/6x6/very_hard/2/initial.binpuz-board.txt +6 -0
  41. data/test/data/boards/binarypuzzle.com/numbered/8x8/easy/1/final.binpuz-board.txt +8 -0
  42. data/test/data/boards/binarypuzzle.com/numbered/8x8/easy/1/initial.binpuz-board.txt +8 -0
  43. data/test/data/boards/binarypuzzle.com/numbered/8x8/medium/1/final.binpuz-board.txt +8 -0
  44. data/test/data/boards/binarypuzzle.com/numbered/8x8/medium/1/initial.binpuz-board.txt +8 -0
  45. data/test/deduction.rb +190 -388
  46. 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
+ | 10 1|
2
+ |1 0 1 1 1|
3
+ | 1 1 |
4
+ |0 11 0 1|
5
+ |0 0 1 1|
6
+ | 0 0 |
7
+ | 1 1 1 |
8
+ | 1 0 1 0 |
9
+ | 1 1 1 |
10
+ |0 10 1 0 |
11
+ | 1 00 |
12
+ | 0 |
13
+ | 1 0 |
14
+ | 0 0 0 |
@@ -0,0 +1,14 @@
1
+ |010 10 1|
2
+ |1 0 1001010101|
3
+ |101 011010 0|
4
+ |0 1 011001 0 1|
5
+ |010 100110 1|
6
+ |1001 1001 0|
7
+ |0110 0110 1 |
8
+ | 011001101010 |
9
+ | 0 101 0101 |
10
+ |0 10 1 0 010 |
11
+ | 011001 1001 |
12
+ | 1001 1 |
13
+ |0110 0 |
14
+ |1001 0 0 |
@@ -0,0 +1,14 @@
1
+ |010110 01 1|
2
+ |10011001010101|
3
+ |10100110101 0|
4
+ |0110011001 0 1|
5
+ |0101100110 01|
6
+ |10011011001 0|
7
+ |01100100110 1 |
8
+ | 011001101010 |
9
+ | 1001101 0101 |
10
+ |0010 1 0110101|
11
+ | 011001 1001 |
12
+ | 1001 01 |
13
+ |0110 0 |
14
+ |1001 0 1 0 |
@@ -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|
@@ -0,0 +1,14 @@
1
+ | 0 1 1 1 |
2
+ | 10 11 |
3
+ | 0 1 1 0 |
4
+ | 1 |
5
+ | 0 1 |
6
+ | 0 1 |
7
+ | |
8
+ | 11 11 |
9
+ | 1 0 0 |
10
+ | 0 0 1 1|
11
+ | 11 1 1|
12
+ | 0 1 |
13
+ | 1 0 |
14
+ | 1 1 0 1 |
@@ -0,0 +1,6 @@
1
+ |1 0 |
2
+ | 00 1|
3
+ | 00 1|
4
+ | |
5
+ |00 1 |
6
+ | 1 00|
@@ -0,0 +1,6 @@
1
+ |101010|
2
+ |010011|
3
+ |100101|
4
+ |011010|
5
+ |001101|
6
+ |110100|
@@ -0,0 +1,6 @@
1
+ | 0 1|
2
+ |1 00 |
3
+ | 1 |
4
+ | 1 |
5
+ | 1 0|
6
+ |00 1 |
@@ -0,0 +1,6 @@
1
+ |100101|
2
+ |110010|
3
+ |011001|
4
+ |100110|
5
+ |011010|
6
+ |001101|
@@ -0,0 +1,6 @@
1
+ |010110|
2
+ |100101|
3
+ |011001|
4
+ |011010|
5
+ |100110|
6
+ |101001|
@@ -0,0 +1,6 @@
1
+ | 1 |
2
+ | 0 1|
3
+ |0 0 |
4
+ | 11 |
5
+ | |
6
+ |1 0 |
@@ -0,0 +1,6 @@
1
+ |0 1 |
2
+ |1 0 1|
3
+ |0 0 |
4
+ |0110 |
5
+ |1 |
6
+ |1 0 |
@@ -0,0 +1,6 @@
1
+ |011001|
2
+ |001 |
3
+ |1 0 |
4
+ | 1 0|
5
+ | 0 |
6
+ | 1001 |
@@ -0,0 +1,6 @@
1
+ |011001|
2
+ |001101|
3
+ |100110|
4
+ |011010|
5
+ |100101|
6
+ |110010|
@@ -0,0 +1,6 @@
1
+ |1 0 0|
2
+ | |
3
+ | 11 |
4
+ | 1 1 |
5
+ | 0|
6
+ | 01 |
@@ -0,0 +1,6 @@
1
+ |100110|
2
+ |101001|
3
+ |011001|
4
+ |010110|
5
+ |101010|
6
+ |010101|
@@ -0,0 +1,6 @@
1
+ | 100|
2
+ | 01 |
3
+ |110 |
4
+ |0101 |
5
+ |001 0 |
6
+ |101 |
@@ -0,0 +1,6 @@
1
+ |110100|
2
+ |001011|
3
+ |110010|
4
+ |010101|
5
+ |001101|
6
+ |101010|
@@ -0,0 +1,6 @@
1
+ |101010|
2
+ |001101|
3
+ |010011|
4
+ |110010|
5
+ |101100|
6
+ |010101|
@@ -0,0 +1,6 @@
1
+ |101010|
2
+ |001101|
3
+ |010011|
4
+ |1 010|
5
+ | 10 |
6
+ | 1010 |
@@ -0,0 +1,6 @@
1
+ |001011|
2
+ |010011|
3
+ |110100|
4
+ |001101|
5
+ |110010|
6
+ |101100|
@@ -0,0 +1,8 @@
1
+ |01101010|
2
+ |10010101|
3
+ |10010110|
4
+ |01101001|
5
+ |00110110|
6
+ |10011010|
7
+ |11001001|
8
+ |01100101|
@@ -0,0 +1,8 @@
1
+ | 0|
2
+ | 00 1 |
3
+ | 0 1 0|
4
+ | 1 |
5
+ |00 1 1 |
6
+ | 1 |
7
+ |11 0 1|
8
+ | 1 1|
@@ -0,0 +1,8 @@
1
+ |10100101|
2
+ |01010101|
3
+ |10101010|
4
+ |10011010|
5
+ |01100101|
6
+ |01100110|
7
+ |10011001|
8
+ |01011010|
@@ -0,0 +1,8 @@
1
+ | 0 0 |
2
+ |0 0 0 0 |
3
+ | |
4
+ | 1 1 |
5
+ |0 0 |
6
+ |0 00 |
7
+ | 1|
8
+ | 1 1 |
@@ -63,487 +63,189 @@ def compare_boards(got, expected)
63
63
  return
64
64
  end
65
65
 
66
- def get_6x6_easy_board_1()
67
- input_str = <<'EOF'
68
- |1 0 |
69
- | 00 1|
70
- | 00 1|
71
- | |
72
- |00 1 |
73
- | 1 00|
74
- EOF
75
- return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
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 get_6x6_easy_board_1__intermediate_board()
79
- str = <<'EOF'
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 get_6x6_easy_board_2()
91
- input_str = <<'EOF'
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 get_6x6_easy_board_2__intermediate_board()
103
- input_str = <<'EOF'
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 get_6x6_medium_board_1()
115
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
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
- input_str = <<'EOF'
527
- |110100100110|
528
- |001101001011|
529
- |110010110100|
530
- |100100101101|
531
- |011011010010|
532
- |011001001101|
533
- |100110110010|
534
- |101001010011|
535
- |010110101100|
536
- |001101011001|
537
- |110011010010|
538
- |001010101101|
539
- EOF
540
- return Binary_Puzzle_Solver.gen_board_from_string_v1(input_str)
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_1__intermediate_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 = get_6x6_easy_board_1()
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 = get_6x6_easy_board_2()
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 = get_6x6_easy_board_2__intermediate_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 = get_6x6_medium_board_1()
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