Generated on Sat Jun 2 2018 07:17:44 for Gecode by doxygen 1.8.13
sudoku.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  * Main authors:
4  * Mikael Lagerkvist <lagerkvist@gecode.org>
5  * Guido Tack <tack@gecode.org>
6  * Christian Schulte <schulte@gecode.org>
7  *
8  * Copyright:
9  * Mikael Lagerkvist, 2005
10  * Guido Tack, 2005
11  * Christian Schulte, 2005
12  *
13  * This file is part of Gecode, the generic constraint
14  * development environment:
15  * http://www.gecode.org
16  *
17  * Permission is hereby granted, free of charge, to any person obtaining
18  * a copy of this software and associated documentation files (the
19  * "Software"), to deal in the Software without restriction, including
20  * without limitation the rights to use, copy, modify, merge, publish,
21  * distribute, sublicense, and/or sell copies of the Software, and to
22  * permit persons to whom the Software is furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be
26  * included in all copies or substantial portions of the Software.
27  *
28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35  *
36  */
37 
38 #include <gecode/driver.hh>
39 #include <gecode/int.hh>
40 #include <gecode/minimodel.hh>
41 
42 #ifdef GECODE_HAS_SET_VARS
43 #include <gecode/set.hh>
44 #endif
45 
46 #include <string>
47 #include <cmath>
48 #include <cctype>
49 
50 using namespace Gecode;
51 
52 namespace {
53  extern const char* examples[];
54  extern const unsigned int n_examples;
55  int example_size(const char *s);
56  int sudokuField(const char *s, int n, int i, int j);
57 }
58 
60 class Sudoku : public Script {
61 protected:
63  const int n;
64 public:
65 #ifdef GECODE_HAS_SET_VARS
66  enum {
70  MODEL_MIXED
71  };
72 #endif
73  // Branching variants
74  enum {
79  BRANCH_AFC
80  };
81 
84  : Script(opt),
85  n(example_size(examples[opt.size()])) {}
86 
88  Sudoku(Sudoku& s) : Script(s), n(s.n) {}
89 
90 };
91 
97 class SudokuInt : virtual public Sudoku {
98 protected:
101 public:
102 #ifdef GECODE_HAS_SET_VARS
103  enum {
107  };
108 #endif
109  SudokuInt(const SizeOptions& opt)
111  : Sudoku(opt), x(*this, n*n*n*n, 1, n*n) {
112  const int nn = n*n;
113  Matrix<IntVarArray> m(x, nn, nn);
114 
115  // Constraints for rows and columns
116  for (int i=0; i<nn; i++) {
117  distinct(*this, m.row(i), opt.ipl());
118  distinct(*this, m.col(i), opt.ipl());
119  }
120 
121  // Constraints for squares
122  for (int i=0; i<nn; i+=n) {
123  for (int j=0; j<nn; j+=n) {
124  distinct(*this, m.slice(i, i+n, j, j+n), opt.ipl());
125  }
126  }
127 
128  // Fill-in predefined fields
129  for (int i=0; i<nn; i++)
130  for (int j=0; j<nn; j++)
131  if (int v = sudokuField(examples[opt.size()], nn, i, j))
132  rel(*this, m(i,j), IRT_EQ, v );
133 
134 #ifdef GECODE_HAS_SET_VARS
135  if (opt.propagation() == PROP_SAME) {
136  // Implied constraints linking squares and rows
137  for (int b=0; b<n; b++) {
138  int b1c = 0;
139  int b2c = 0;
140  IntVarArgs bc1(nn-n);
141  IntVarArgs bc2(nn-n);
142  IntVarArgs br1(nn-n);
143  IntVarArgs br2(nn-n);
144  for (int i=0; i<n; i++)
145  for (int j=0; j<n; j++) {
146  b1c = 0; b2c = 0;
147  for (int k=0; k<n; k++) {
148  if (k != j) {
149  IntVarArgs bc1s = block_col(m, b, i, k);
150  IntVarArgs br1s = block_row(m, b, i, k);
151  for (int count=0; count<n; count++) {
152  bc1[b1c] = bc1s[count];
153  br1[b1c] = br1s[count];
154  ++b1c;
155  }
156  }
157  if (k != i) {
158  IntVarArgs bc2s = block_col(m, b, k, j);
159  IntVarArgs br2s = block_row(m, b, k, j);
160  for (int count=0; count<n; count++) {
161  bc2[b2c] = bc2s[count];
162  br2[b2c] = br2s[count];
163  ++b2c;
164  }
165  }
166  }
167  same(*this, nn, bc1, bc2);
168  same(*this, nn, br1, br2);
169  }
170  }
171  }
172 #endif
173  if (opt.branching() == BRANCH_NONE) {
174  branch(*this, x, INT_VAR_NONE(), INT_VAL_SPLIT_MIN());
175  } else if (opt.branching() == BRANCH_SIZE) {
176  branch(*this, x, INT_VAR_SIZE_MIN(), INT_VAL_SPLIT_MIN());
177  } else if (opt.branching() == BRANCH_SIZE_DEGREE) {
179  } else if (opt.branching() == BRANCH_SIZE_AFC) {
180  branch(*this, x, INT_VAR_AFC_SIZE_MAX(opt.decay()), INT_VAL_SPLIT_MIN());
181  } else if (opt.branching() == BRANCH_AFC) {
182  branch(*this, x, INT_VAR_AFC_MAX(opt.decay()), INT_VAL_SPLIT_MIN());
183  }
184  }
185 
188  x.update(*this, s.x);
189  }
190 
192  virtual Space*
193  copy(void) {
194  return new SudokuInt(*this);
195  }
196 
198  virtual void
199  print(std::ostream& os) const {
200  os << " ";
201  for (int i = 0; i<n*n*n*n; i++) {
202  if (x[i].assigned()) {
203  if (x[i].val()<10)
204  os << x[i] << " ";
205  else
206  os << (char)(x[i].val()+'A'-10) << " ";
207  }
208  else
209  os << ". ";
210  if((i+1)%(n*n) == 0)
211  os << std::endl << " ";
212  }
213  os << std::endl;
214  }
215 
216 #ifdef GECODE_HAS_SET_VARS
217 private:
219  void same(Space& home, int nn, IntVarArgs a, IntVarArgs b) {
220  SetVar u(home, IntSet::empty, 1, nn);
221  rel(home, SOT_DUNION, a, u);
222  rel(home, SOT_DUNION, b, u);
223  }
224 
226  IntVarArgs
227  block_col(Matrix<IntVarArray> m, int bc, int i, int j) {
228  return m.slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n);
229  }
230 
232  IntVarArgs
233  block_row(Matrix<IntVarArray> m, int br, int i, int j) {
234  return m.slice(j*n, (j+1)*n, br*n+i, br*n+i+1);
235  }
236 #endif
237 };
238 
239 #ifdef GECODE_HAS_SET_VARS
240 
245 class SudokuSet : virtual public Sudoku {
246 protected:
249 public:
252  : Sudoku(opt),
253  y(*this,n*n,IntSet::empty,1,n*n*n*n,
254  static_cast<unsigned int>(n*n),static_cast<unsigned int>(n*n)) {
255 
256  const int nn = n*n;
257 
258  Region r;
259  IntSet* row = r.alloc<IntSet>(nn);
260  IntSet* col = r.alloc<IntSet>(nn);
261  IntSet* block = r.alloc<IntSet>(nn);
262 
263  // Set up the row and column set constants
264  int* dsc = r.alloc<int>(nn);
265  for (int i=0; i<nn; i++) {
266  row[i] = IntSet((i*nn)+1, (i+1)*nn);
267 
268  for (int j=0; j<nn; j++) {
269  dsc[j] = (j*nn)+1+i;
270  }
271  col[i] = IntSet(dsc, nn);
272  }
273 
274  // Set up the block set constants
275  int* dsb_arr = r.alloc<int>(nn);
276  for (int i=0; i<n; i++) {
277  for (int j=0; j<n; j++) {
278 
279  for (int ii=0; ii<n; ii++) {
280  for (int jj=0; jj<n; jj++) {
281  dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
282  }
283  }
284  block[i*n+j] = IntSet(dsb_arr, nn);
285  }
286  }
287 
288  IntSet full(1, nn*nn);
289  // All x must be pairwise disjoint and partition the field indices
290  rel(*this, SOT_DUNION, y, SetVar(*this, full, full));
291 
292  // The x must intersect in exactly one element with each
293  // row, column, and block
294  for (int i=0; i<nn; i++)
295  for (int j=0; j<nn; j++) {
296  SetVar inter_row(*this, IntSet::empty, full, 1U, 1U);
297  rel(*this, y[i], SOT_INTER, row[j], SRT_EQ, inter_row);
298  SetVar inter_col(*this, IntSet::empty, full, 1U, 1U);
299  rel(*this, y[i], SOT_INTER, col[j], SRT_EQ, inter_col);
300  SetVar inter_block(*this, IntSet::empty, full, 1U, 1U);
301  rel(*this, y[i], SOT_INTER, block[j], SRT_EQ, inter_block);
302  }
303 
304  // Fill-in predefined fields
305  for (int i=0; i<nn; i++)
306  for (int j=0; j<nn; j++)
307  if (int idx = sudokuField(examples[opt.size()], nn, i, j))
308  dom(*this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
309 
310  if (opt.branching() == BRANCH_NONE) {
311  branch(*this, y, SET_VAR_NONE(), SET_VAL_MIN_INC());
312  } else if (opt.branching() == BRANCH_SIZE) {
313  branch(*this, y, SET_VAR_SIZE_MIN(), SET_VAL_MIN_INC());
314  } else if (opt.branching() == BRANCH_SIZE_DEGREE) {
316  } else if (opt.branching() == BRANCH_SIZE_AFC) {
317  branch(*this, y, SET_VAR_AFC_SIZE_MAX(opt.decay()), SET_VAL_MIN_INC());
318  } else if (opt.branching() == BRANCH_AFC) {
319  branch(*this, y, SET_VAR_AFC_MAX(opt.decay()), SET_VAL_MIN_INC());
320  }
321  }
322 
325  y.update(*this, s.y);
326  }
327 
329  virtual Space*
330  copy(void) {
331  return new SudokuSet(*this);
332  }
333 
335  virtual void
336  print(std::ostream& os) const {
337  os << '\t';
338  for (int i = 0; i<n*n*n*n; i++) {
339  for (int j=0; j<n*n; j++) {
340  if (y[j].contains(i+1)) {
341  if (j+1<10)
342  os << j+1 << " ";
343  else
344  os << (char)(j+1+'A'-10) << " ";
345  break;
346  }
347  }
348  if((i+1)%(n*n) == 0)
349  os << std::endl << '\t';
350  }
351  os << std::endl;
352  }
353 };
354 
355 
362 class SudokuMixed : public SudokuInt, public SudokuSet {
363 public:
366  : Sudoku(opt), SudokuInt(opt), SudokuSet(opt) {
367  const int nn = n*n;
368 
369  IntSet is0(0,0);
370  SetVar dummySet0(*this, is0, is0);
371  IntVar dummyInt0(*this, 0, 0);
372  SetVarArgs ys(nn+1);
373  ys[0] = dummySet0;
374  for (int i=0; i<nn; i++)
375  ys[i+1] = y[i];
376  IntVarArgs xs(nn*nn+1);
377  xs[0] = dummyInt0;
378  for (int i=0; i<nn*nn; i++)
379  xs[i+1] = x[i];
380 
381  channel(*this, xs, ys);
382 
383  IntArgs values(nn);
384  for (int i=nn; i--;)
385  values[i] = i+1;
386  count(*this, x, IntSet(nn,nn), values, IPL_DOM);
387  }
388 
391  : Sudoku(s), SudokuInt(s), SudokuSet(s) {}
392 
394  virtual Space*
395  copy(void) {
396  return new SudokuMixed(*this);
397  }
398 
400  virtual void print(std::ostream& os) const { SudokuInt::print(os); }
401 
402 };
403 
404 #endif
405 
409 int
410 main(int argc, char* argv[]) {
411  SizeOptions opt("Sudoku");
412  opt.size(0);
413  opt.ipl(IPL_DOM);
414  opt.solutions(1);
415 #ifdef GECODE_HAS_SET_VARS
417  opt.model(Sudoku::MODEL_INT, "int", "use integer constraints");
418  opt.model(Sudoku::MODEL_SET, "set", "use set constraints");
419  opt.model(Sudoku::MODEL_MIXED, "mixed",
420  "use both integer and set constraints");
422  opt.propagation(SudokuInt::PROP_NONE, "none", "no additional constraints");
423  opt.propagation(SudokuInt::PROP_SAME, "same",
424  "additional \"same\" constraint for integer model");
425 #endif
427  opt.branching(Sudoku::BRANCH_NONE, "none", "none");
428  opt.branching(Sudoku::BRANCH_SIZE, "size", "min size");
429  opt.branching(Sudoku::BRANCH_SIZE_DEGREE, "sizedeg", "min size over degree");
430  opt.branching(Sudoku::BRANCH_SIZE_AFC, "sizeafc", "min size over afc");
431  opt.branching(Sudoku::BRANCH_AFC, "afc", "maximum afc");
432  opt.parse(argc,argv);
433  if (opt.size() >= n_examples) {
434  std::cerr << "Error: size must be between 0 and "
435  << n_examples-1 << std::endl;
436  return 1;
437  }
438 #ifdef GECODE_HAS_SET_VARS
439  switch (opt.model()) {
440  case Sudoku::MODEL_INT:
441  Script::run<SudokuInt,DFS,SizeOptions>(opt);
442  break;
443  case Sudoku::MODEL_SET:
444  Script::run<SudokuSet,DFS,SizeOptions>(opt);
445  break;
446  case Sudoku::MODEL_MIXED:
447  Script::run<SudokuMixed,DFS,SizeOptions>(opt);
448  break;
449  }
450 #else
451  Script::run<SudokuInt,DFS,SizeOptions>(opt);
452 #endif
453  return 0;
454 }
455 
456 namespace {
457 
466 
468  const char* examples[] = {
469  // 0
470  "...2.5..."
471  ".9....73."
472  "..2..9.6."
473  "2.....4.9"
474  "....7...."
475  "6.9.....1"
476  ".8.4..1.."
477  ".63....8."
478  "...6.8..."
479  ,
480  // 1
481  "3..9.4..1"
482  "..2...4.."
483  ".61...79."
484  "6..247..5"
485  "........."
486  "2..836..4"
487  ".46...23."
488  "..9...6.."
489  "5..3.9..8"
490  ,
491  // 2
492  "....1...."
493  "3.14..86."
494  "9..5..2.."
495  "7..16...."
496  ".2.8.5.1."
497  "....97..4"
498  "..3..4..6"
499  ".48..69.7"
500  "....8...."
501  ,
502  // 3
503  // Fiendish puzzle April 21 2005 Times London
504  "..4..3.7."
505  ".8..7...."
506  ".7...82.5"
507  "4.....31."
508  "9.......8"
509  ".15.....4"
510  "1.69...3."
511  "....2..6."
512  ".2.4..5.."
513  ,
514  // 4
515  // This one requires search
516  ".43.8.25."
517  "6........"
518  ".....1.94"
519  "9....4.7."
520  "...6.8..."
521  ".1.2....3"
522  "82.5....."
523  "........5"
524  ".34.9.71."
525  ,
526  // 5
527  // Hard one from http://www.cs.mu.oz.au/671/proj3/node5.html
528  ".....3.6."
529  ".......1."
530  ".975...8."
531 
532  "....9.2.."
533  "..8.7.4.."
534  "..3.6...."
535 
536  ".1...289."
537  ".4......."
538  ".5.1....."
539  , // Puzzle 1 from http://www.sudoku.org.uk/bifurcation.htm
540  // 6
541  "1..9.7..3"
542  ".8.....7."
543  "..9...6.."
544  "..72.94.."
545  "41.....95"
546  "..85.43.."
547  "..3...7.."
548  ".5.....4."
549  "2..8.6..9"
550  , // Puzzle 2 from http://www.sudoku.org.uk/bifurcation.htm
551  // 7
552  "...3.2..."
553  ".5.798.3."
554  "..7...8.."
555  "..86.73.."
556  ".7.....6."
557  "..35.41.."
558  "..5...6.."
559  ".2.419.5."
560  "...8.6..."
561  , // Puzzle 3 from http://www.sudoku.org.uk/bifurcation.htm
562  // 8
563  "...8....6"
564  "..162.43."
565  "4...71..2"
566  "..72...8."
567  "....1...."
568  ".1...62.."
569  "1..73...4"
570  ".26.481.."
571  "3....5..."
572  , // Puzzle 4 from http://www.sudoku.org.uk/bifurcation.htm
573  // 9
574  "3.5..4.7."
575  ".7......1"
576  ".4.9...3."
577  "4...51..6"
578  ".9.....4."
579  "2..84...7"
580  ".2...7.6."
581  "8......9."
582  ".6.4..2.8"
583  , // Puzzle 5 from http://www.sudoku.org.uk/bifurcation.htm
584  // 10
585  "...7..3.."
586  ".6....57."
587  ".738..41."
588  "..928...."
589  "5.......9"
590  "....936.."
591  ".98..715."
592  ".54....6."
593  "..1..9..."
594  , // Puzzle 6 from http://www.sudoku.org.uk/bifurcation.htm
595  // 11
596  "...6....4"
597  ".3..9..2."
598  ".6.8..7.."
599  "..5.6...1"
600  "67.3.1.58"
601  "9...5.4.."
602  "..6..3.9."
603  ".1..8..6."
604  "2....6..."
605  , // Puzzle 7 from http://www.sudoku.org.uk/bifurcation.htm
606  // 12
607  "8....1.4."
608  "2.6.9..1."
609  "..9..6.8."
610  "124.....9"
611  "........."
612  "9.....824"
613  ".5.4..1.."
614  ".8..7.2.5"
615  ".9.5....7"
616  , // Puzzle 8 from http://www.sudoku.org.uk/bifurcation.htm
617  // 13
618  "652.48..7"
619  ".7.2.54.."
620  "........."
621  ".641...7."
622  "....8...."
623  ".8...456."
624  "........."
625  "..86.7.2."
626  "2..89.751"
627  , // Puzzle 9 from http://www.sudoku.org.uk/bifurcation.htm
628  // 14
629  "..6..2..9"
630  "1..5...2."
631  ".473.6..1"
632  ".....8.4."
633  ".3.....7."
634  ".1.6....."
635  "4..8.321."
636  ".6...1..4"
637  "3..4..9.."
638  , // Puzzle 10 from http://www.sudoku.org.uk/bifurcation.htm
639  // 15
640  "..4.5.9.."
641  "....7...6"
642  "37......2"
643  "..95...8."
644  "..12.43.."
645  ".6...92.."
646  "2......93"
647  "1...4...."
648  "..6.2.7.."
649  , // Puzzle 11 from http://www.sudoku.org.uk/bifurcation.htm
650  // 16
651  "....3.79."
652  "3.......5"
653  "...4.73.6"
654  ".53.94.7."
655  "....7...."
656  ".1.82.64."
657  "7.19.8..."
658  "8.......1"
659  ".94.1...."
660  , // From http://www.sudoku.org.uk/discus/messages/29/51.html?1131034031
661  // 17
662  "2581.4.37"
663  "936827514"
664  "47153.28."
665  "7152.3.4."
666  "849675321"
667  "36241..75"
668  "1249..753"
669  "593742168"
670  "687351492"
671  ,
672  // 18
673  // The following minimal 25*25 Sudokus are from Alain Frisch
674  // Sudoku website http://www.eleves.ens.fr/home/frisch/sudoku.html
675  "...G...9..4.....6F..L8..."
676  "CEIN.HDM.OF.1L..A..9PJ.4."
677  ".....A...L..JBN.2.D.1...H"
678  "P49...JB23.AD..7E..C5F..."
679  "A1H....F.N5....I.BL...26."
680  "....7..C.6...H4B..1....I5"
681  ".F.P...I..B..7.5.L...9..."
682  ".L6A...5OF.8P...K.NE..734"
683  "B2.E..L...1J.5....O7.K.AP"
684  "O.5.CB1.P....3EM....2L.H."
685  "2..MJ.A...9.3.7......P.8C"
686  ".....CF.DPG62N.E...OH.M.J"
687  ".DL..OM..IE.B8..NH...3..K"
688  ".CO1F.B.N.AH..P.78.JE...D"
689  "E..6.....H......4M.KIB9.."
690  "N.J..6......C..1.5.G..H.."
691  "...75LG...6..1..CI..4.E.."
692  "9K..6.....HGN.O2P.4......"
693  ".OA..IP849...2.K3...7GN.."
694  "..G....N...P.D9....A...C1"
695  "J...M.NAFE.4..23.7....8L."
696  ".....J.H9CD1LP..GO....4ME"
697  "48NK..5.M......JL.......9"
698  ".I.OG....835.A.DH..P....."
699  "35......L.J..E....8IG.67B"
700  ,
701  // 19
702  ".N..JG..O7591...8I....L.."
703  "FG.M.B8...P.E...CJ..H...."
704  "...........G.4.H.D.O.NJA2"
705  ".....J.EN4.L6MA.B.2......"
706  "HE..2..DC.....F4KMA.B.9O8"
707  "M....62...47C19......E5.."
708  ".I2.8M.JGL...ADN..K..3.F7"
709  "..H3.5..89....I.J.....NL."
710  "1B..9.FAP.6.N....537.H..O"
711  "......1..N...O...LC.68.PG"
712  "KOA.FNBH.....7.C.....M..6"
713  "45.ECP.I..N.F.J1...MK.79."
714  "I.L..8.O..9.P...A...2.1J."
715  "..621.D.M.....B8LG..P..CH"
716  ".HP.N7E.L1....3..B..O.G45"
717  "....BIO....5.C.P...FN48E."
718  "...FL.....2.DH..17..59O.."
719  "..I.MF..2G.N...A6O.HC.PB."
720  "72.1..L...IM.96E.45G....."
721  "..9...7M..A.O...I...L...."
722  ".C.JA.........1.....E.48."
723  "O.BI.......PHL.6..1....5C"
724  "G6M...N4FI8...K..H.E....."
725  ".L..4.917....BE.G8F.M.I.."
726  "8F......5.O3..4...9.....K"
727  ,
728  // 20
729  "5.PC..7..J..I...3..H.M.2L"
730  "H.......F..DA..N.G...9..P"
731  "...3LCP2.54.71.B....J.8.."
732  "76M8...3A...H..C.D.FO...."
733  "...DK..GI..B.L.6.8.14...."
734  "A......M....D.6.N.P....O2"
735  "...E5BLF..92..3AJC..6I..."
736  ".PNJ.6..E7A.8..IM.OL1.G.C"
737  ".L3...O.N.5.KI.46.....9E."
738  ".I.G.A..28.MBP...E..HJ3.7"
739  "J.74.L..D1O96.A3.M...GI.."
740  "E...1...K....J...P6.7.C.9"
741  "8M..A9JO.F.P..1...4.E3N6."
742  "...I.3.7.......EL.CD..H.."
743  "....DE2..P...N.........K."
744  ".O.7.FKI1..GJ.N.....9.P8."
745  ".89..H..BNM73D.KFJ..I.6.A"
746  "PDBN...9M..C.....O.6..7.."
747  ".F.K...4..LA9B..C.E75..GN"
748  "G.A.....7.8.....H....O.3."
749  "B...C...4......8K.3.P...."
750  "DHE5..FA...J.3..B.2.KC.98"
751  "...F...5....N..J9......I."
752  ".J...P..O.BK....I.M.3..5."
753  "9...8.B.6.D.M.I..H.5G.J4."
754  ,
755  // 21
756  "..6F.....5..3.....H..A.M2"
757  ".....3....I8.A.MC.KJ.LNG."
758  ".I.7N..K.2..6...3D..B.O85"
759  ".3A.PF.D8OBK7.2....L6.9H4"
760  ".K..CBML.....O.A8.G4.D..."
761  "1.4.AGL..M5..F.O.9....P2."
762  "..I.........8......N4E..."
763  "J.C8.1.6.3.LO.K7AG2P9.H.."
764  ".2.3BH..9.A...G......O..L"
765  ".H..M8.J.....NI1.LEF....B"
766  "I5..4.....G.27..K..3.M..H"
767  "P..E..I.A..3B.8....G.2..."
768  "AJ......NFK.I.O9476..G.1."
769  ".976...E3H....M5.F......O"
770  ".F.M3.5.GKC4.HJ.N.....ID7"
771  "..L1K..9.J37.ID..B..E6..."
772  ".82OH.1..PNML...E..C...J."
773  "....JLFN.B..G..6M..H..D.9"
774  "...C.A...I.6.......K.5..."
775  "E.G.I.....O....J.8F......"
776  "..M4..9.D.7.K.FE.3O......"
777  "H.N.....14E..B3L..8I...AG"
778  "K.O.62.PM...N..H...18C.9."
779  "LC..8.3...2...H.G...J..4E"
780  ".B..9NK.E....C6.P.4D.71OI"
781  ,
782  // 22
783  "A..F.N......M28DC.LI7..OJ"
784  "..B...D.M.6....9.....2A.."
785  ".2..I.56.B...J.MEH......."
786  "O7...HE...BA..G2........L"
787  ".H6J.2...G.7NDP.A...8..C."
788  ".PN35..B..869.2.GA..K.C.."
789  "....EM13OD.N...49K...7..."
790  "9G..C....IJF5.B..7.3....."
791  "HD.....JN....7...EF....9."
792  "1.OA..G.KL....H..B.CP...."
793  "..CE.......2..9I....3...."
794  "FJ..83P.E..K7.NL15H..I2.."
795  ".4..GJ...6DIB...P...AHL.C"
796  ".1I.2.M....83.F..4.NBE..."
797  "L3M.OD.H.AG..4.....69...F"
798  ".8...5H.3.....M...D..K..4"
799  "3..4..AEDO7J...5..9..G1.."
800  "..2N9.8F.P.OIGC.L6..E.H.."
801  "C...1.7..K.L6.4EO.8.5...N"
802  ".IG.H..M..E...1A2N4..8.F."
803  "6..5J..N1...2..H.IGA...P8"
804  ".L...O...H...C....M5G..A."
805  "..F...3C.7.P..5N..B..DMH9"
806  "291D..6..M..H.7.3.J.N..B."
807  "....MK..29F.G.DO4...6.E35"
808  ,
809  // 23
810  "....B12O3..D..F..KPL.E4.7"
811  "1M..GL..H..K.A.....39.P.."
812  ".8.3.4.....7..6.F.....CK."
813  "P.O...758.2..MC.....1L.A."
814  "...HFK6.A..8...9B...2...J"
815  "91.KJE..L.5O..GD.....4..."
816  ".I..3..D.2.....C4MLAK..N."
817  ".4..6IA.P7.....B9......3."
818  "M.F...4.J...8....N.H.1G7."
819  "..5P.N.....C.731.I.E.9A.."
820  ".....GO.KDL......BA......"
821  ".3A..F...9..K.EI5.7..6.DN"
822  ".G.54.L.....PH..3F6....2."
823  "....P.....G..2D.OH.1B...C"
824  "6.EM.7N....3.B4..DC..K1P."
825  "B.9.....I..5N...7OGK...46"
826  "OF.GD6HP..JM..BA8.I.C...."
827  "8.L7...........P.3M5...92"
828  ".EM.....45IF7....2.CJ8DL."
829  ".6.4.8..NA.2......9....GI"
830  "2..A1DCN..3G.F5.L..I..O6H"
831  "..BIO..1.H.L...G........."
832  "C.P.....M8.9O..5A..N.JK.D"
833  "H...N...FOA4..73....5..CM"
834  ".D4..3...6BE..N.2JH8..L.."
835  ,
836  // 24
837  "LJ.FH2...K....359.E.B6.N."
838  "...EML1FC.PJ.A.8I....2.K4"
839  "9........G1..6..K...PAL3C"
840  "P...C34..8.N7.........DE."
841  "...7....E..IO...124.J5.F."
842  ".8.L.PA.2..31FG....N..C.I"
843  "F.G......M........2.K..1."
844  "....2KH6.JOD..9.L..G...B."
845  ".6O3..G...4.NJ.H.PB...5.9"
846  "I...K..LBN...E.76.A....8."
847  "D.B.L......8.3.C.KM.6...."
848  ".C593.I.N4.26MB..1..L.K.."
849  "M.F6......DA45.9..N.I3..B"
850  ".G..79.H...KJ...4...AN.2."
851  ".KH...BC....LON..7..D.8.F"
852  "2..B...MP....7OEJ4....6.1"
853  ".4....2O.9......N..1....G"
854  ".....G.JF.2..L.6.5......."
855  "C9A.G...H1...PJ..L.3.8.MN"
856  "...1......M.....O.P8.K3J."
857  "...N.HP.K25G3..JC8..1M..."
858  "..2K.FC34.A....N7..9.LB.."
859  "..65DJ..L..C.4.1...BGF..."
860  "OF..E..7.B.......634...D."
861  "G.3..N.I9D7PM8KF2....4..."
862  ,
863  // 25
864  ".1..I8.P..6.N...BD...3O.."
865  ".9.6...E.M43.8..AK.2J.1.."
866  "...JKL...FA...P.I4...DB.."
867  "E...P.I.B.7.1..J.HC...98."
868  "..5M8GJ.KD.O...N3..1AI..."
869  "K.2C4.M.N..J..I.......H.5"
870  "N..B9O.D...KH6.E...C...7I"
871  "DE..JK4.....L.1B7..68PN2."
872  ".....P...C..F.7...L.O9..."
873  "...35.H......92..M.4.EC.1"
874  "P..IL..H.........1..3.D.."
875  "....B9..8.3I5.C...K...F1."
876  "FH....2O..D.4M.P...A...GC"
877  "JA.......KF.......4.EOMIP"
878  "3.7GNF...A.2OB9C.E5.HJ..."
879  "2.I.1.......AO5.P...K.3.."
880  "..H....L..M.CIJ..7...4..."
881  "GO.9..KF.I.P3...E.HJ...N7"
882  "5.37...B.E...4N..O.8....."
883  "4B...7.9O.HL..E2C3.K51.M."
884  "L.O42...D..AJ.8...GH.N..E"
885  "9M.8.H..LG1..N..5.E..F7B."
886  "......FAC..5M..I6J.B4...G"
887  "...F..82..P.E......36HK.L"
888  "B.J.G5...O.H2..98.7......"
889  ,
890  // 26
891  ".CNPHK.53.O9F..D.78..J..."
892  "J.....F.DB...7.G..PAE...L"
893  ".6.........5.4A......I..."
894  "A..L.6.E.1JG....5.H.2...9"
895  "..G4..P...E2N.M...C..FB.1"
896  "..PKJ...G41O..C.N..H....."
897  ".M..I5L97J.3H...E2.8...D."
898  "1.4..ON.83G.P.D59..C.BH.."
899  "..2.9.......4.F.3.6..O.7."
900  "3F.7.MEC..5...2..4K.LN8.."
901  "...I........MF7.6AOG..LE."
902  "C1.3..JG..D.9...4..N...68"
903  "...M7L9..NHA...FJ.I..3.C."
904  ".A...P...5...E3.8M..K4OFG"
905  ".....C.6KIP...8..3.DJ...."
906  ".2.J...3C..7.D.9A.EF6L..."
907  "4...3.6N.....L9.H..P8...2"
908  ".9.C.4H.......P....1..FJ3"
909  ".LD.K87.1.BM5AJN....4H.G."
910  ".B..MAI........47O.LD...."
911  ".G....3....F..1..9..M..K6"
912  "P7.A..B8.......2....I.3.."
913  "M..O....9K2..6..1.N.FE.L."
914  "....E...A..N.J.IG8...C.9."
915  "6KL.4...FCI.A.....5J.2D.N"
916  ,
917  // 27
918  "E..I...M......L....D...BK"
919  "F..BH9.K.A2.7..E4.P.6..M."
920  ".6.J..PD8FE.IM...K...54.."
921  "L...8E...IA..HC........7J"
922  ".....7H.4.JK..DOFC....9I."
923  "9...7A.5.B.M34E.KDJ8....."
924  "8...BD....O..7....CP.E.6."
925  ".1.3..8....D...2.ML.B..5A"
926  ".E2.A.O.7..1..I.659..8LD."
927  "KF..M2...PL......A.G..N3."
928  "...76N.1..CBG...DPK..O.J2"
929  ".JK...6B.9..P.7.N.EMFDG.5"
930  "N....G.F.8....OH9.2...E.7"
931  "....4.3....F9.....5.NC.A."
932  "M.A.GL.J......5..4.7.91.."
933  "C.8NE.5..6..M.....BJ17..H"
934  "7.6...NL.41.AC.I8...GJ3.."
935  "...53P.GM2.L..F.....K.68."
936  "J.4.D..H..IG..8K..35.N.FL"
937  "P.F...93.D.....A.1......M"
938  "..7.I...1...DF..PJ.4.MA.."
939  ".KN.....5H..O.63.E.2....4"
940  "....1...O..A2..DCH8B..KE."
941  "3.HA.6BP.....J1957O..28.."
942  "42JO.I...K5C......6.P.B.."
943  ,
944  // 28
945  "...G87..O..F.N..CH6..D..2"
946  "C16..N....DL.3.E........."
947  ".LN.EK..D..O.G6.412....5H"
948  "K...2........59M...P..3.."
949  "..A9.M.6....8.E7O3..K..LB"
950  "7..8B.1.EP.....4.L.6.C.9."
951  ".3.6...9.85.A2F.....B.EP."
952  ".D4K.L..NA....C.M.E..7..."
953  "L..P.3H.CG.7....DKF..I6.."
954  "5EH.G.7.6.1....J....D3K.O"
955  ".6.....G.K.E..I2.4J......"
956  "..ICFP.8H7.2.O.B.NM5..G.."
957  ".M..D9..BE..J..F..I7..LAK"
958  ".BE.L...31.M7FK..C9..8.DN"
959  ".2O......D38C...E...F.P.."
960  ".A.....M..NB..3.J.7E8..2."
961  "...O...B..6..C.8KG4..5D7M"
962  "....M8..I..9..AL1.O.3HBNG"
963  ".C..4....L.....D.F......."
964  "J..5NF..G...H..6..C..1..."
965  "D..N..O....G9.J.A..I...8."
966  ".F.H1BN.K.O.4.8.6.3.9.M.."
967  "B...I....9K..6..2...G.H1."
968  "O...7.CJMI25N...HDKBPFAE."
969  ".....28.F..C........O.JK."
970  ,
971  // 29
972  "9.K..6D.I5...........H..."
973  ".I.E..BK...GN...6.L...3.."
974  "7....2..L8E.K.D1.P5I.6..A"
975  "..N.LEH.A32..CM9........."
976  "..2....9N...3.IC...J.KF8."
977  "......GA..C.7JPNI3....6L."
978  "....E.J.8K..I.....97NG2.B"
979  "O7..3HI...M.....DCF5..914"
980  "L.M.4.3.19.D..2......F.K."
981  "B....F...O9.6ANG.2.PH.E.5"
982  "8KDM...5.1....G......P..6"
983  ".4.H.L.C..J2....G..3ION.."
984  "C.A..J..E...1K......92.5."
985  ".9O.NP.2...IA....H..G..7."
986  "...I5..O.N4.H...2DCKJ...E"
987  "56....1.D..AJ.....7.L.O.."
988  "K.8.H.7.9.5....AC..O..G6F"
989  "3..........O..C.F.P6K.5.."
990  "...OC.4J2.3E.9...N.H7..P1"
991  ".B.7.K.....6.MH.LJ..A...."
992  "I..4.........P..E7D9O.B.H"
993  "E.3G.OP...I1CBL..FN4..82."
994  ".A..9N.8.E...73O..H....4."
995  ".M.C.3....DK..EI......JG."
996  ".HP..D..FB...NO.1KJ8.AL.."
997  ,
998  // 30
999  "....L.1.8H.CO..P....FA..."
1000  "P1.2.4CO...K..A..3H8...7."
1001  "I..H.G.5.B.6.M..A24.K..9."
1002  "....6I.KF9..5.P.J1.BDCE.M"
1003  ".A....2...F..L..E.M.6.5O3"
1004  "7..1.C...8.L9..4P.5.G.K.."
1005  "JO.5H.M2.I.7.F.6D..A4..NE"
1006  "E.3.NO....K2...LG..7JM..."
1007  ".9F.CJ.H....A.NKB.1..2.5."
1008  "2LB...5..7.P36H.M..N...1D"
1009  ".....P..B....46.HJ......."
1010  "B4..7LI.C.GD2...KA.3H...."
1011  "K5......6J1.........27O8P"
1012  "LP...5K.G..JB3.......1.M."
1013  "..EG...4.F.NKC...O..9.B.."
1014  "..MI...D32AGP..5O...74.BN"
1015  "FC74.....1..LO..8...5.D.J"
1016  "..JN....H...E.I...DPA3.6."
1017  "AE.......O3F..5.........H"
1018  "...8..6......24.9G....I.1"
1019  ".M....8.9..O1.F.C.EL3...A"
1020  ".N...E.3.....I7M1...ODG.K"
1021  "1......P.N9..D..5........"
1022  ".I.P..FGOCMA.......J.5..2"
1023  ".GK....7...3.....92..B.L4"
1024  ,
1025  // 31
1026  "...H....GKM.43..B.D......"
1027  "15I.C....8B.6D.7G....A.H4"
1028  ".7...F..B...J.E16.N....3."
1029  "...D.1...6L7.H.5K....P98F"
1030  "KJ.AF.5CHO...NP2M.....B.."
1031  "4..K..I9.M.DNP..A.3..E5O6"
1032  "PGC...HE.....I5..M...7..J"
1033  ".B.EJ..G.5..L....D.48.2.."
1034  ".D....N.4.J.2A..H..5..F1."
1035  "8....AJLD.7..OM...1B....P"
1036  "CH...N..7.........B3....."
1037  "I..O.JL..P5...3......KH.8"
1038  "D.259.E......6.......L3.."
1039  "...3K6.B.AE..74N25H..G1.."
1040  ".L.B..41.HC...G.OIP8..MN7"
1041  ".........2.C.4.L....69.I5"
1042  "N...7.C...69.5.A......PKL"
1043  "....L.G...13.BOMP.82..D7H"
1044  "...C.H..5.P.E.K...I7....."
1045  "JO..P.96ABI8.....C..N..4G"
1046  ".NA8H.32..O4..IB..L9G..J."
1047  "..4.GD..M.3..27INJ.O....."
1048  ".C9L..A..J.....6.2..I..F."
1049  "BK...4..F.A.CL..87.1.O.M."
1050  "6..P.I.5...M..N....F....D"
1051  ,
1052  // 32
1053  ".6OL.3GB.I.1F.EP..9..24.."
1054  "..1.P.....K....N.2.....ID"
1055  "2.8.K7..J...6..1F.......A"
1056  "...D.8.4..29..LJ7.HMKPF.."
1057  "..I.9N...A..P.M.DK...E5.."
1058  "94.N...5..F..E.C182..BG3."
1059  "8D..3HC....6G.....P.F.72I"
1060  "C..I.E.7D....8BG.F...6..."
1061  "......L....N.24..I..1K.DJ"
1062  ".27HG.NF......I..L..E.A.."
1063  "L...N.I8F6.H.9K.3O..B..5P"
1064  ".9...L..25.B14F.N.JE...7K"
1065  ".1...9B....GJ.8.A.5C....."
1066  "....CPK..J....5.M.7.6.H.3"
1067  "..F7..3..O..N..B8....421."
1068  "AM.8....P...71..26N...3G."
1069  "P....D.2.78.O..5CJ.GA.BH."
1070  "6..4.F...3...K9A..1...J.M"
1071  ".I2.E......JM.N...B98..P."
1072  "FC..7..6.EI.D.G...3H5..KN"
1073  "I8NO.4F.9..DB....5......."
1074  "5..1...G3.MIH.A.9..N....."
1075  "KG.62..1.....L3.....IJE.F"
1076  "....D.6.AC4.9.....OL.HP.."
1077  "..EA.5O.L.6.......D...9N."
1078  ,
1079  // 33
1080  ".CH3.L..D4F..I.........1."
1081  "G..K.....7.O.......L.42N."
1082  "A.D...5O8B...39G.4..I...L"
1083  "1E2OB....A8N..6FCD9.H...G"
1084  "IN..4..3.....J..5OM....9."
1085  "...JEMP..9G8..D7......BA."
1086  "B.M9..L....6...2.FI.KJ..."
1087  ".LN.386A..BH....O.J.2..7."
1088  "7A6..2..3N.....4KP..G8HIC"
1089  ".1.....J.CK3....HB..5L4.."
1090  ".H......P.I.57....G..21B4"
1091  "....7.....EP1....3.2..A.."
1092  ".59.1FI.L8.MJG.B..AH....E"
1093  "NI..D....O3K..A.P9..8F..."
1094  ".O....A..E2.8.HN.J7.P...."
1095  ".MC..P....H2...A7..ID...1"
1096  ".6.....M.J.14.BDG.3.O9F2."
1097  ".......CG.........4...M.."
1098  "HDL...8N7.......FK2C.E..B"
1099  "..KP2I.F.3...N7J.E.6..L85"
1100  "D.E...C.4.7B..I....A.1..M"
1101  "J..M..7..D.A..4...ONBG..2"
1102  "9.7.6..K..P..O....D...8.."
1103  ".2IN..GE1.D..8...MK.CPJH."
1104  "FG..8B.2.L..KH.....1.5E..",
1105 
1106  // 55 16x16 instances (mostly harmless) from janko.at
1107 
1108  // http://janko.at/Raetsel/Sudoku/301.a.htm
1109  // 34
1110  "D92.....G...43.."
1111  "4CF.....9D.2.6EB"
1112  ".E.1....F.8BC..A"
1113  "G56.....A3C....1"
1114  ".7G5A8....61...."
1115  "2...C....B7....."
1116  "..AE.964..G....."
1117  ".F9.5.7.4......."
1118  ".....29....A.C.."
1119  "........645D.1.."
1120  "....D....1.C.B7F"
1121  ".....E.C2G...8A9"
1122  "B..9.G52.....EF6"
1123  ".256..F.....D.B."
1124  "E13.6.D........7"
1125  "A...8BC3....954."
1126  ,
1127 
1128  // http://janko.at/Raetsel/Sudoku/302.a.htm
1129  // 35
1130  ".DG1.C.BE..3.4.A"
1131  "..7B.62..41...59"
1132  ".......D.....G.."
1133  "..49.7.3.B6..FD."
1134  ".9..G...C......4"
1135  "G..46....9F.3.B."
1136  ".C5.1...BE.86..G"
1137  ".B.....E2G...D.."
1138  "..3...596.....1."
1139  "F..C2.76...B.E3."
1140  ".1.8.4D....7F..5"
1141  "E......F...D..9."
1142  ".AB..FG.1.3.C8.."
1143  "..2.....F......."
1144  "8F...BC..62.97.."
1145  "1.6.A..59.C.GB2."
1146  ,
1147 
1148  // http://janko.at/Raetsel/Sudoku/303.a.htm
1149  // 36
1150  ".....D.3..7F.A.."
1151  "...B1.F8....26.."
1152  ".F.3...6D..AC..."
1153  "AGC.9.5..8....BD"
1154  "E.FG5...7...A.9."
1155  "2.7.....89A36.F5"
1156  "...1.9...CBE...."
1157  ".3....A.....BG2."
1158  ".1B2.....7....6."
1159  "....B16...3.9..."
1160  "5D.4F3EA.....2.B"
1161  ".E.A...9...D83.C"
1162  "4A....B..E.8.FC9"
1163  "...EA..G1...D.4."
1164  "..GC....FD.B1..."
1165  "..D.47..6.C....."
1166  ,
1167 
1168  // http://janko.at/Raetsel/Sudoku/304.a.htm
1169  // 37
1170  "....9...5...3B.."
1171  "...D13.7.4.....F"
1172  "637...2..81AC9.."
1173  ".2G..5.......18D"
1174  "...F4...3...8C.."
1175  "E.D.7..6..G...A5"
1176  "C5.6..3....F.2.."
1177  "4.A...1D72.9..B."
1178  ".E..D.9CA6...F.1"
1179  "..9.5....E..D.26"
1180  "B6...4..D..5.7.A"
1181  "..F4...A...C9..."
1182  "AB4.......2..G6."
1183  "..68FBD..5...A47"
1184  "1.....6.9.E4B..."
1185  "..32...5...B...."
1186  ,
1187 
1188  // http://janko.at/Raetsel/Sudoku/305.a.htm
1189  // 38
1190  "..16.E.8.BF.4..."
1191  ".5...9D......A73"
1192  "..3...B.78.D.6.."
1193  "......1...9...BE"
1194  "C..1D..6B5..7.A4"
1195  "...5.F.98..32.DG"
1196  "3.....C..D.A5.E."
1197  "....3B5.F7...9.."
1198  "..5...6C.2AE...."
1199  ".3.BE.2..4.....9"
1200  "F9.2A..B5.7.G..."
1201  "EA.G..756..BD..1"
1202  "6C...8...9......"
1203  "..9.6.47.E...D.."
1204  "2GE......C6...F."
1205  "...3.CG.2.D.65.."
1206  ,
1207 
1208  // http://janko.at/Raetsel/Sudoku/306.a.htm
1209  // 39
1210  ".....D5..7.169.."
1211  "..4..2BE8.G..A.."
1212  "8DA....752..BGF."
1213  "G.9EA.86..3F2..."
1214  "C..4G1.....7F..."
1215  ".G.A...315.6..C8"
1216  "E.5..F7.4G..1.A2"
1217  ".91..BE...D.54G."
1218  ".68D.3...C5..B9."
1219  "4E.5..9B.31..F.G"
1220  "3B..E.G1A...C.4."
1221  "...95.....F83..7"
1222  "...C9G..F1.5D8.B"
1223  ".468..DFC....3E5"
1224  "..2..E.A7DB..C.."
1225  "..EFB.3..86....."
1226  ,
1227 
1228  // http://janko.at/Raetsel/Sudoku/307.a.htm
1229  // 40
1230  ".BC..32...9..D.."
1231  ".3..CB...52A.9E4"
1232  "7E.A...D8.6B2..5"
1233  "..9F..A.DC7.B6.."
1234  ".15..2.E..3...4."
1235  "4GD81.3C...7..6F"
1236  ".C.9....E.4.G..1"
1237  "..E3..59G.FD.B.."
1238  "..A.2E.FC9..84.."
1239  "B..E.9.4....F.A."
1240  "16..A...57.F3E9B"
1241  ".9...6..4.E..7G."
1242  "..64.C85.2..DA.."
1243  "E..DB1.23...6.59"
1244  "C5G.9D4...1E..2."
1245  "..2..F...DA..CB."
1246  ,
1247 
1248  // http://janko.at/Raetsel/Sudoku/308.a.htm
1249  // 41
1250  "G.E37..1.....6.."
1251  "96..E..3..G5D.F."
1252  ".7..64.CF31..29E"
1253  "....F...8.9E437."
1254  "6AF...D.3..1...."
1255  "..1...B5.8F47..3"
1256  ".83B2.47.G....61"
1257  "..79.6...EC..8.G"
1258  "E.C..2A...8.FG.."
1259  "25....C.GA.78B4."
1260  "7..AD3F.24...E.."
1261  "....G..B.1...C52"
1262  ".4A2B5.D...8...."
1263  "FE8..G2A1.73..C."
1264  ".C.78F..4..2..E5"
1265  "..9.....E..G34.8"
1266  ,
1267 
1268  // http://janko.at/Raetsel/Sudoku/309.a.htm
1269  // 42
1270  ".G.4..1E6.9...2."
1271  ".D..4G.C.....9F7"
1272  "..79.D...5C.B.G."
1273  ".EFC7...G..D.5.3"
1274  "5...C...E6BFD..."
1275  "...1...5..D.CB.2"
1276  "7.CG29.D3...E8.F"
1277  "94...EGB.2.C...."
1278  "....E.2.583...CD"
1279  "3.D5...89.FB7G.E"
1280  "4.1E.F..A...3..."
1281  "...F1B3G...E...9"
1282  "F.9.8..1...G23D."
1283  ".A.B.4D...7.5F.."
1284  "8CE.....1.25..7."
1285  ".7...5.3F9..G.8."
1286  ,
1287 
1288  // http://janko.at/Raetsel/Sudoku/310.a.htm
1289  // 43
1290  "...4.1.9..7...B5"
1291  "6E..2.8....CGA.."
1292  ".51....B.D....6."
1293  "B.9..E..G..A...7"
1294  "..7.5F9G..48...."
1295  "..29..3..F..5.7."
1296  "G.BD...837.E..94"
1297  "......7E.1.6A2G3"
1298  "94GA7.2.63......"
1299  "5B..A.E18...79.2"
1300  ".1.8..6..4..BD.."
1301  "....G8..EB92.4.."
1302  "D...9..A..1..G.6"
1303  ".3....4.C....1E."
1304  "..4B6....E.7..2A"
1305  "F9...5..A.3.4..."
1306  ,
1307 
1308  // http://janko.at/Raetsel/Sudoku/361.a.htm
1309  // 44
1310  ".G..5.2.E.FA.4C."
1311  "AB..G....35.17D9"
1312  "53..4AC..DB....."
1313  ".6.C3B..2.8.5..."
1314  "1...A....E.D9CG3"
1315  "GDA9.4..B.1.6E.."
1316  ".FB.1..E9....D.8"
1317  "C..3.59G48......"
1318  "......F38G2.7..4"
1319  "6.3....A7..9.8E."
1320  "..CE.9.1..4.DG35"
1321  "89GD2.4....6...C"
1322  "...G.C.4..958.7."
1323  ".....1A..F78..42"
1324  "4871.3G....2..9A"
1325  ".C9.72.8.6.4..1."
1326  ,
1327 
1328  // http://janko.at/Raetsel/Sudoku/362.a.htm
1329  // 45
1330  "A...18..79..C..6"
1331  ".37.A2...FD...E9"
1332  "G14D..5...8C.A.."
1333  ".268.E7.3A....D5"
1334  "3...D1...7A2.8.4"
1335  "7CF.9..4....D.2."
1336  "5..63.A28...1CF."
1337  "...1.6...3FD..5."
1338  ".A..FC6...9.3..."
1339  ".D2F...3A5.1E..8"
1340  ".9.G....D..7.F1C"
1341  "E.C.G9D...3F...7"
1342  "17....9B.2E.43C."
1343  "..9.E3...C..5D7F"
1344  "FE...AC...G5.29."
1345  "D..C..2F..73...E"
1346  ,
1347 
1348  // http://janko.at/Raetsel/Sudoku/363.a.htm
1349  // 46
1350  "3.8.BD..5F72E..6"
1351  "..G..4.7E..6F5.."
1352  ".AF.2..C....9G73"
1353  "59C...FE.AG....."
1354  "C5..1..F.4.G.E.7"
1355  "F..2.C..B13...GD"
1356  "4..B73.D....C..."
1357  "GD...A...C.7B48."
1358  ".G5FD.3...9...BE"
1359  "...C....6.E1G..9"
1360  "28...7E1..B.6..4"
1361  "1.B.5.C.3..8..AF"
1362  ".....ED.16...345"
1363  "9C21....7..A.8E."
1364  "..EA9..3F.8..7.."
1365  "6..5827A..4D.F.C"
1366  ,
1367 
1368  // http://janko.at/Raetsel/Sudoku/364.a.htm
1369  // 47
1370  "1.....6C.4G.9BA."
1371  ".G6..F.9A.D1...2"
1372  "...D7G.3F...41.."
1373  ".3A.2..1.759.E.G"
1374  "B8..D.F.C.2.A..."
1375  "C....1..DBFA2..5"
1376  "..FG.E.....58C9."
1377  ".25A3.C.G..E...1"
1378  "3...4..B.G.DE78."
1379  ".C78A.....3.12.."
1380  "5..1FC37..E....9"
1381  "...4.2.8.F.B..CA"
1382  "A.4.6B7.5..F.9D."
1383  "..8C...DB.975..."
1384  "9...85.E3.A..46."
1385  ".5D7.A9.E2.....8"
1386  ,
1387 
1388  // http://janko.at/Raetsel/Sudoku/365.a.htm
1389  // 48
1390  "..D.2...5A1....F"
1391  "E21F..9..6.D...G"
1392  "7A.9G1..2E.4D..8"
1393  ".B64.3FA...8.E.2"
1394  "...3...F...G2A.."
1395  ".F7...5.8D4.B.3."
1396  "4....C.....F8.D1"
1397  ".G....B3A2.....6"
1398  "3.....4CF8....6."
1399  "94.B1.....D....E"
1400  ".C.A.E8D.B...15."
1401  "..G8B...1...C..."
1402  "B.A.8...6F2.3DE."
1403  "2..16.E5..A39.84"
1404  "6...9.3..5..1C2B"
1405  "8....D12...9.6.."
1406  ,
1407 
1408  // http://janko.at/Raetsel/Sudoku/366.a.htm
1409  // 49
1410  "3....2A.4F.6..G1"
1411  "ADF4..3..5....E."
1412  "..5G..1E....FAB."
1413  "..E.GF75..B..93."
1414  "B...17...A629..."
1415  "...EFG..7.516..C"
1416  "63..D...G...E42F"
1417  "2....8639...1G.."
1418  "..B8...76G2....E"
1419  "5C32...4...E..1G"
1420  "G..62E.9..D4B..."
1421  "...D5CG...A3...7"
1422  ".G7..5..84F9.B.."
1423  ".F6B....5E..21.."
1424  ".5....B..6..7EF9"
1425  "E4..A.9F.BC....5"
1426  ,
1427 
1428  // http://janko.at/Raetsel/Sudoku/367.a.htm
1429  // 50
1430  "B........45DC.6A"
1431  "4.F...639.CA.E.."
1432  ".9A...CD26.8F1B."
1433  "6.C3.7.8.F..9..."
1434  "D68.E..B...5...."
1435  "73...8A5..9.2..."
1436  "A.G1..9..26..D8."
1437  ".C9.......81A6E."
1438  ".574FA.......G1."
1439  ".AD..37..G..4F.E"
1440  "...9.G..452...CD"
1441  "....B...F..9.725"
1442  "...B..G.C.F.12.9"
1443  ".16AC.5FG3...8D."
1444  "..2.36.759...C.F"
1445  "F8.C194........6"
1446  ,
1447 
1448  // http://janko.at/Raetsel/Sudoku/368.a.htm
1449  // 51
1450  "C..B61..G...F.AE"
1451  "4E8F...A.....DG."
1452  ".D..F3.E1.5A..6."
1453  "5.....GBE9FC..82"
1454  "..5EB.D8...1.F.6"
1455  "..AD.72...6..3.8"
1456  "...3..E.9FB85..."
1457  "6.B4..1....2CAE."
1458  ".3E9C....G..D1.7"
1459  "...CEG3D.7..A..."
1460  "A.F..B...CD.EG.."
1461  "D.7.1...B2.348.."
1462  "FG..8EB17A.....3"
1463  ".4..D6.G3.CE..5."
1464  ".62.....D...74CA"
1465  "3B.A...4..9F8..G"
1466  ,
1467 
1468  // http://janko.at/Raetsel/Sudoku/369.a.htm
1469  // 52
1470  "...E.6DB...2.8.."
1471  "....5G.3.9F8C1.."
1472  "981....FG....7.."
1473  ".3.F8....65.2..9"
1474  "3G....4A5D..7.F."
1475  ".A.D...2......64"
1476  ".2.4C.F..A.G...3"
1477  "..F.D.....6C.21E"
1478  "1F9.B2.....E.D.."
1479  "4...E.3..B.DF.2."
1480  "5E......9...3.C."
1481  ".D.3..8142....5A"
1482  "2..5.D6....F1.A."
1483  "..4....86....EDG"
1484  "..3CGFB.E.DA...."
1485  "..G.3...279.6..."
1486  ,
1487 
1488  // http://janko.at/Raetsel/Sudoku/370.a.htm
1489  // 53
1490  "3....1G..5.7.A4."
1491  "FE7C.3.9.......G"
1492  ".8.....5D9G.C..3"
1493  "5G.A6....38.FD7."
1494  "...5G.94.8.27C.."
1495  ".98.E.5C.G......"
1496  "4....7.25.CB.6.A"
1497  "2A.F.......6.5G."
1498  ".F3.5.......4.DB"
1499  "C.B.98.AF.7....6"
1500  "......6.2D.C.9E."
1501  "..6G4.B.81.9A..."
1502  ".D53.C8....E6.97"
1503  "A..2.D467.....5."
1504  "8.......4.9.32B1"
1505  ".4F.2.3..61....C"
1506  ,
1507 
1508  // http://janko.at/Raetsel/Sudoku/501.a.htm
1509  // 54
1510  "..E3.7.1.5.6.B.."
1511  "....G85B92.FE..."
1512  "C...4.36A......2"
1513  ".4.BA......G7..C"
1514  "48.2E...5G.9ADB."
1515  ".....B...C4...9E"
1516  "9A..F42.E1...5C."
1517  ".5C.7.9G8....413"
1518  "BE8....26A.C.G3."
1519  ".FD...7E.931..56"
1520  "AC...G6...2....."
1521  ".1369.85...BD.A7"
1522  "E..A6......5C.7."
1523  "3......A7F.E...5"
1524  "...51.G7CDA2...."
1525  "..G.C.B.3.1.9A.."
1526  ,
1527 
1528  // http://janko.at/Raetsel/Sudoku/502.a.htm
1529  // 55
1530  "G..B..12....73.C"
1531  "..8DB.7CG9A....."
1532  "6.3...D...4E.8B."
1533  "4...38G.21....AD"
1534  "..F.........E.6."
1535  ".E6..75DFG3.B..."
1536  ".7.G.F916EB.4583"
1537  ".B.3.E2..89...F1"
1538  "74...3E..62.5.1."
1539  "9852.CB7DFE.3.G."
1540  "...A.56F431..C9."
1541  ".F.6.........E.."
1542  "C1....F4.B5G...E"
1543  ".D4.EG...2...9.8"
1544  ".....D8974.1CA.."
1545  "B.A7....ED..F..4"
1546  ,
1547 
1548  // http://janko.at/Raetsel/Sudoku/503.a.htm
1549  // 56
1550  "7B..9C.3..6.A.2E"
1551  "4.2...67A..53..D"
1552  ".....ADE.CB.4.5."
1553  "AD8....B7.F....."
1554  ".C...1.A.9.....8"
1555  "F.E8...C.4.D.6.2"
1556  "..D.59.......1A."
1557  ".1.2......7FBDC3"
1558  "BF6EC4......2.7."
1559  ".53.......C2.E.."
1560  "D.G.2.A.5...F3.C"
1561  "2.....1.B.3...8."
1562  ".....F.43....CD7"
1563  ".8.G.E7.C25....."
1564  "C..DG..1F7...2.A"
1565  "E7.A.6..9.18..B5"
1566  ,
1567 
1568  // http://janko.at/Raetsel/Sudoku/504.a.htm
1569  // 57
1570  ".21..BD...EF6G.."
1571  "..6.5.F....D.8.E"
1572  "G4.....EB.7.1.D3"
1573  "C.D..37G..61...."
1574  "AB.D8..9.1.E..F."
1575  "6.F4..G..D..8..B"
1576  "....BD.1F.8.7.C9"
1577  "..3...6..G.BED.."
1578  "..B91.C..E...A.."
1579  "47.2.6.A3.1G...."
1580  "8..3..E..B..F1.G"
1581  ".1..7.3.D..C9.25"
1582  "....GF..28B..4.A"
1583  "5A.8.4.B1.....GF"
1584  "D.2.C....F.6.7.."
1585  "..41DA...7G..C9."
1586  ,
1587 
1588  // http://janko.at/Raetsel/Sudoku/505.a.htm
1589  // 58
1590  ".B...7..4D..E13."
1591  "D......6G.E7...F"
1592  "8.6F....B....7.."
1593  "7...91D..F8C.B.."
1594  ".F.G8.1.3..27..."
1595  ".1.6.4329.7.F..D"
1596  "3..7..5..GBD8..."
1597  "48D.CE....A...9."
1598  ".3...G....C4.9EB"
1599  "...148C..3..A..2"
1600  "9..4.6.7FA5.C.G."
1601  "...EF..5.1.B6.D."
1602  "..5.ABG..7F9...6"
1603  "..3....F....18.E"
1604  "G...E5.32......9"
1605  ".6FB..89..3...C."
1606  ,
1607 
1608  // http://janko.at/Raetsel/Sudoku/506.a.htm
1609  // 59
1610  "...FDAE..6.1.3B."
1611  "1..C...9.D34.6.."
1612  "8A3.4.....2E7C.."
1613  "..DG.3......8.5E"
1614  "3F2.C.....8B.5.9"
1615  ".DE.8..B2C..A..4"
1616  "C8...1.........6"
1617  ".....D.31.5...E."
1618  ".G...E.84.D....."
1619  "A.........1...43"
1620  "D..E..17C..2.FG."
1621  "2.5.AF.....9.D7B"
1622  "73.2......6.B4.."
1623  "..483B.....D.A61"
1624  "..A.14F.B...5..C"
1625  ".1C.6.D..24A9..."
1626  ,
1627 
1628  // http://janko.at/Raetsel/Sudoku/507.a.htm
1629  // 60
1630  "4.8CB9G...D..FA2"
1631  "G..18..A96...E.."
1632  "F9....ED..8....B"
1633  "...D73...2F.G.81"
1634  ".......2....C.F9"
1635  "3.D7.E6...9.4..A"
1636  ".C.4..D9.GA..3.7"
1637  ".2.......7.3.65."
1638  ".3B.5.2.......D."
1639  "6.4..G8.FC..B.2."
1640  "E..G.B...D2.18.F"
1641  "CD.2....3......."
1642  "D1.B.8F...C9E..."
1643  "2....D..1B....G5"
1644  "..5...17D..G9..C"
1645  "7E9..C...468FD.3"
1646  ,
1647 
1648  // http://janko.at/Raetsel/Sudoku/508.a.htm
1649  // 61
1650  "D.B.8.4..5G..2.9"
1651  ".C..6.3...D1.7B."
1652  "GE4.B..52A..FD.C"
1653  "..7.2..E.F9....."
1654  ".2..4....3.D9GEF"
1655  "43.7..A..8......"
1656  "5.ABGD.F..1...37"
1657  "..E......7..6B.."
1658  "..2E..G......3.."
1659  "C5...B..D.F971.8"
1660  "......5..2..C.GE"
1661  "348GD.C....7..5."
1662  ".....91.8..F.6.."
1663  "1.G2..F65..E.89B"
1664  ".8C.54...1.G..F."
1665  "F.5..87..9.A.C.1"
1666  ,
1667 
1668  // http://janko.at/Raetsel/Sudoku/509.a.htm
1669  // 62 // problems
1670  "..EF96...8.5B.C."
1671  "D...FE....1.2A.."
1672  ".86..2..C...57.1"
1673  "C21...BD9..E...3"
1674  "5..1.C...6....DA"
1675  ".G.....7.E.1.5BC"
1676  "B...D1..8...7..."
1677  "..9D..A27.3.E..."
1678  "...3.A.E5B..6F.."
1679  "...5...C..83...B"
1680  "FDB.2.9.6.....5."
1681  "61....5...E.G..9"
1682  "4...8..3B7...EA2"
1683  "E.26...A..G..CF."
1684  "..58.D....4F...G"
1685  ".B.7C.2...5AD9.."
1686  ,
1687 
1688  // http://janko.at/Raetsel/Sudoku/510.a.htm
1689  // 63
1690  "..2..DA6.38.14.."
1691  "...5.F..2......."
1692  "6.8.2.G.....7A.B"
1693  "A.F.....65.G..D."
1694  "...6.8E.52...B.."
1695  "7....2.F.G39..8E"
1696  "8..3679..4.C.1.G"
1697  ".B.EG..18.A....7"
1698  "1....A.8C..FG.3."
1699  "E.A.1.3..D42B..5"
1700  "97..CG6.1.B....4"
1701  "..3...2D.E6.A..."
1702  ".C..B.74.....5.A"
1703  "B.68.....C.7.D.F"
1704  ".......A..1.2..."
1705  "..4A.C8.E6G..7.."
1706  ,
1707 
1708  // http://janko.at/Raetsel/Sudoku/511.a.htm
1709  // 64
1710  "A..95.B.G...8.FD"
1711  "G.D...6FB...A5.."
1712  ".B...1D83.A9G.7."
1713  "F68....G5..1...C"
1714  "..28DA9..5FC...G"
1715  "..G.87.2.A4D.6.."
1716  "....3F.....E.CD9"
1717  "9C5D......G.FA8."
1718  ".71B.6......5842"
1719  "D5F.B.....26...."
1720  "..9.127.F.85.D.."
1721  "2...E35..CB719.."
1722  "6...F..BE....734"
1723  ".F.ECD.3479...2."
1724  "..AG...9C1...F.8"
1725  "39.5...1.D.FB..A"
1726  ,
1727 
1728  // http://janko.at/Raetsel/Sudoku/512.a.htm
1729  // 65
1730  "....G5D.C1...B2."
1731  "6...E.BC.G..D8.."
1732  "D13C..7..4..5G.."
1733  ".72B48..5.6.C9.."
1734  "....B9E....F4.12"
1735  "...A..FD7B.C8..3"
1736  "E6F..1....G3.DB9"
1737  "B..4.2.89.1...G."
1738  ".5...7.ED.C.G..8"
1739  "C9D.14....E..A35"
1740  "8..2D.591A..6..."
1741  "7G.36....259...."
1742  "..6D.E.5..B4A27."
1743  "..95..2..8..B3D4"
1744  "..7G..4.6E.5...F"
1745  ".B8...97.C32...."
1746  ,
1747 
1748  // http://janko.at/Raetsel/Sudoku/513.a.htm
1749  // 66
1750  "D...9A..6.F4.3.C"
1751  "....B6..5A.E9D.."
1752  "6E5......D..7F.."
1753  ".3G9..FDC...4..."
1754  "16..AF4..C.7..58"
1755  "G....1..A.B8..F9"
1756  ".7C.3..8...F6..."
1757  "A8.F.G.C43..2..."
1758  "...7..9E3.D.8.4F"
1759  "...8G...9..5.6C."
1760  "59..F3.4..C....G"
1761  "4F..6.D..B7A..2E"
1762  "...D...BE9..G86."
1763  "..2G..3......BE5"
1764  "..E48.6A..2C...."
1765  "3.8.E5.F..AD...4"
1766  ,
1767 
1768  // http://janko.at/Raetsel/Sudoku/514.a.htm
1769  // 67
1770  "...B562E.1G....."
1771  ".D27A...4...56B."
1772  ".G6..B.C..2..E7."
1773  ".1.C..7.DB..3.42"
1774  "....37.2E..G..64"
1775  "D.3..5..C.A8.G.1"
1776  "C..A...F9...D..3"
1777  ".2.FDG8..3.4.5.E"
1778  "2.8.F.4..CEBG.5."
1779  "E..D...G5...C..B"
1780  "1.5.2C.D..9..F.8"
1781  "FC..E..5G.81...."
1782  "A3.5..G8.9..6.E."
1783  ".F4..A..2.1..39."
1784  ".E16...3...C42G."
1785  ".....E1.763AF..."
1786  ,
1787 
1788  // http://janko.at/Raetsel/Sudoku/515.a.htm
1789  // 68
1790  "A.5.FB.C...7..3."
1791  "G38....D.C.EB5.."
1792  "..F...3.9G8..D7."
1793  "...E.2.4.A.59.FG"
1794  "8..A..6.3F7D5..."
1795  "B..4....5...DEA."
1796  "61..BD75..E....."
1797  ".5C.1E.A.8....62"
1798  "C8....E.7.62.GD."
1799  ".....A..D95F..84"
1800  ".D41...6....2..7"
1801  "...928D1.E..3..C"
1802  "57.3E.A.8.9.C..."
1803  ".21..C58.4...F.."
1804  "..6C9.1.2....AEB"
1805  ".A..D...G.1C.4.5"
1806  ,
1807 
1808  // http://janko.at/Raetsel/Sudoku/516.a.htm
1809  // 69
1810  "...E9.5..6.G...F"
1811  ".6.4.3.G...7.1.B"
1812  ".37A.E..49.5C..."
1813  "9....C76.32E.548"
1814  ".E...4..DG9.2..."
1815  ".4...562C...G8.."
1816  ".G93..1B5F.2.C.7"
1817  "C1.639.A.......5"
1818  "D.......2.496.8G"
1819  "6.3.F.9EG5..B2C."
1820  "..AB...86EC...3."
1821  "...9.2C1..B...D."
1822  "7A1.462.3B5....D"
1823  "...D5.89..G.1BA."
1824  "E.5.G...9.6.F.2."
1825  "4...B.E..D.87..."
1826  ,
1827 
1828  // http://janko.at/Raetsel/Sudoku/517.a.htm
1829  // 70
1830  ".FE6.A.8......1."
1831  "145..7.E..F...68"
1832  "...C.4..EG82..5F"
1833  "....5FD.7B1..C.4"
1834  "..4.82A.C..1B..."
1835  ".8C7..5....AD24G"
1836  "..1F..9.G83BA..."
1837  "..A9F.E6D.....71"
1838  "F9.....53C.718.."
1839  "...321CD.6..74.."
1840  "A1726....4..GFC."
1841  "...49..F.1A8.E.."
1842  "D.F..62B.593...."
1843  "4B..D83A..2.5..."
1844  "87...5..B.4..936"
1845  ".6......8.7.CBD."
1846  ,
1847 
1848  // http://janko.at/Raetsel/Sudoku/518.a.htm
1849  // 71
1850  "...84......D.1F7"
1851  ".6.C..A.4G.....9"
1852  "..945.G.8.F..3A."
1853  "...7CFD2.3...E.G"
1854  "..6B..58..G....."
1855  "8.7..G.C9.4A1..E"
1856  "C..EA3.9...5.GD."
1857  ".F...2.....B3.8A"
1858  "AB.6F.....C...9."
1859  ".7E.B...5.16G..3"
1860  "1..G79.3A.D..C.5"
1861  ".....1..7E..AB.."
1862  "3.4...8.E792B..."
1863  ".E8..D.B.A.359.."
1864  "5.....1A.D..E.3."
1865  "69D.2......C7..."
1866  ,
1867 
1868  // http://janko.at/Raetsel/Sudoku/519.a.htm
1869  // 72// problems
1870  "CD.E9.8......6.."
1871  ".62..3...E..85.7"
1872  ".G...6...AF5...D"
1873  "....D54.39.8...E"
1874  "6FB..ED4...G.1.."
1875  "4.A.5..2D......G"
1876  ".C.1...GF53A2..6"
1877  ".2.3.A.1....F..."
1878  "...2....4.B.9.6."
1879  "3..6G8E95...4.2."
1880  "G......D9..3.F.8"
1881  "..4.2...68A..GC3"
1882  "A...1.3E.D9C...."
1883  "E...49C...5...1."
1884  "2.9D..A...8..3F."
1885  "..8......2.7A.E5"
1886  ,
1887 
1888  // http://janko.at/Raetsel/Sudoku/520.a.htm
1889  // 73
1890  "D..6..1.2C3....8"
1891  "..1..386..5..9.."
1892  ".8C2......DGBF1."
1893  "..5.G......1.A.D"
1894  "..A876..4..C5..."
1895  "64F...AD.2.5..C."
1896  "E....1B9.6A...24"
1897  "B...4....8G...7."
1898  ".7...BD....6...9"
1899  "FG...C9.1D4....A"
1900  ".5..E.6.G7...1DC"
1901  "...BF..G..2A37.."
1902  "5.8.6......D.3.."
1903  ".E2D5A......7CF."
1904  "..7..9..A51..4.."
1905  "9....DC1.4..E..5"
1906  ,
1907 
1908  // http://janko.at/Raetsel/Sudoku/586.a.htm
1909  // 74
1910  "8D...6E...A2...."
1911  "E9.6....4..D.537"
1912  "..539C.2..7.A4.."
1913  "..B2G..5......6D"
1914  ".F....G9CB84...."
1915  "21.D.F5..7.EB.G6"
1916  "983..47.65...A.2"
1917  ".7.C6....A..3954"
1918  "C698..1....54.7."
1919  "F.A...46.82..D9G"
1920  "42.5B.C..3G.6.8F"
1921  "....5E28F9....A."
1922  "7B......G..1C3.."
1923  "..F4.5..B.3AG6.."
1924  "35E.C..A....7.49"
1925  "....D1...FC...25"
1926  ,
1927 
1928  // http://janko.at/Raetsel/Sudoku/587.a.htm
1929  // 75
1930  "6D.5F.B83..7...."
1931  ".F.761...854.A.."
1932  "39.8.D..B..EF.6."
1933  "..E.3.956F...CB1"
1934  "F65......GBA...2"
1935  "...3.6C7D9...8.B"
1936  "..DE..82F.7...5."
1937  "B.7.DF....3.619."
1938  ".A9B.5....81.F.6"
1939  ".3...E.BG5..12.."
1940  "C.G...DF7B9.A..."
1941  "5...1C6......B84"
1942  "7E6...F91A.B.3.."
1943  ".5.9A..D..6.B.2E"
1944  "..A.BG5...F97.1."
1945  "....2..65E.8C.AF"
1946  ,
1947 
1948  // http://janko.at/Raetsel/Sudoku/588.a.htm
1949  // 76
1950  "F.....8.43..BGD6"
1951  "6E..G29....C3.7."
1952  "2.1..D7.5.E..C.."
1953  "89.4...C7.612..."
1954  ".1.F..DAEB5...8."
1955  "..6AF34...D..E1."
1956  "E...B..5..8G.493"
1957  "7.892....4.3D..."
1958  "...1E.A....F63.C"
1959  "D6E.89..G..5...1"
1960  ".G3..F...91E78.."
1961  ".F...1GB36..E.A."
1962  "...87G.6C...4.FA"
1963  "..7..8.1.FB..6.2"
1964  ".D.GA....134..CE"
1965  "C2A6..F3.5.....D"
1966  ,
1967 
1968  // http://janko.at/Raetsel/Sudoku/589.a.htm
1969  // 77
1970  "...439.27..5..G."
1971  "5C67...A93...2D."
1972  ".3B...1D...2.78."
1973  "...2.G7.8EA.3.5F"
1974  "E.C.A23....D...7"
1975  "...D.B..G7F81..6"
1976  ".G.1.68.2A.ECD.."
1977  "F8.6.4G......AE5"
1978  "643......DB.F.2E"
1979  "..586.4C.F2.D.B."
1980  "B..F8A2G..3.7..."
1981  "7...E....894.C.A"
1982  "D7.3.1B4.CE.9..."
1983  ".F4.9...B2...6C."
1984  ".BG...67D...4E13"
1985  ".6..F..31.4AB..."
1986  ,
1987 
1988  // http://janko.at/Raetsel/Sudoku/590.a.htm
1989  // 78
1990  ".1B.....2.59F.6G"
1991  "G.2341A...BF...."
1992  "C.E8....3..D.24."
1993  "F....9E..1...B38"
1994  "..1.F45.6.3.2..9"
1995  "3..E.8C.5D..1..."
1996  "....DB..A8...FE3"
1997  ".4.93.1.E..G.8D."
1998  ".GF.C..7.5.69.8."
1999  "BDC...F1..A8...."
2000  "...5..94.21.G..C"
2001  "E..1.5.8.FC3.D.."
2002  "1B4...8..92....6"
2003  ".A8.9..C....45.B"
2004  "....12...6853A.F"
2005  "5C.27A.B.....91."
2006  ,
2007 
2008  // http://janko.at/Raetsel/Sudoku/591.a.htm
2009  // 79
2010  "A57...8E4......9"
2011  ".4C85.6....9.E3B"
2012  ".E1...3G657..AC8"
2013  "...F.1.9.8EA5.7."
2014  ".8.5.7...4F...2."
2015  "..9316....BG8..."
2016  "..E2A..4.....D97"
2017  "F.4....856..G1.3"
2018  "6.84..ECB....F.5"
2019  "5FA.....C..637.."
2020  "...7F4....1528.."
2021  ".2...35...8.C.1."
2022  ".9.13E2.8.4.A..."
2023  "BD2..G4FAC...98."
2024  "8G5.C....D.EF3B."
2025  "4......57B...2G6"
2026  ,
2027 
2028  // http://janko.at/Raetsel/Sudoku/592.a.htm
2029  // 80
2030  "..8.A.F.B97.1.6."
2031  "1B79...6.....8E."
2032  "..E3..928...D.5."
2033  "26..8.B....17..."
2034  "91..6A2..B3..D.."
2035  ".F..37.52.GD.4.."
2036  "3.679...5.EF...A"
2037  "4.B..FC..16...G5"
2038  "73...8A..5D..F.1"
2039  "5...FC.3...98G.E"
2040  "..F.D5.13.A8..B."
2041  "..A..B6..2FG..7D"
2042  "...6B....E.2..1C"
2043  ".4.F...A1D..GE.."
2044  ".A2.....G...4638"
2045  ".7.G.28F.6.3.A.."
2046  ,
2047 
2048  // http://janko.at/Raetsel/Sudoku/593.a.htm
2049  // 81
2050  ".2ED.4...C...F.."
2051  ".8.FE.6.1.....A4"
2052  "A..7.8F.29.B...C"
2053  "....3GCB...5.87D"
2054  "..45DA..B7F3C.6."
2055  "....G...4..CA2.5"
2056  "2.7.F..CG...34B."
2057  ".ED.B54381..G..."
2058  "...4..825GBE.3F."
2059  ".B5G...63..F.C.1"
2060  "1.F27..E...4...."
2061  ".D.84FG5..167B.."
2062  "3C1.2...DB8G...."
2063  "D...6.59.F3.8..2"
2064  "4G.....F.A.71.C."
2065  "..8...B...9.ED3."
2066  ,
2067 
2068  // http://janko.at/Raetsel/Sudoku/594.a.htm
2069  // 82
2070  "5....E...7B..CF2"
2071  "AF.467....3...D."
2072  "D.E.C.3....8.7.."
2073  "....8..DA6.E..5."
2074  "..3B....4.A.EF1."
2075  "69..B.D.3.....C7"
2076  "1..G...49.C..6.."
2077  "...D12G5FE..B..."
2078  "...7..93285AF..."
2079  "..8..4.76...2..G"
2080  "96.....F.3.B..84"
2081  ".AB3.G.6....95.."
2082  ".1..F.69E..2...."
2083  "..9.G....F.3.2.E"
2084  ".E...D....95G.BF"
2085  "2G7..C5...4....3"
2086  ,
2087 
2088  // http://janko.at/Raetsel/Sudoku/595.a.htm
2089  // 83
2090  ".3.B8..C61...2.."
2091  ".E.2...F..4.1A67"
2092  "71D...A...C..B.."
2093  ".6...92D.B.3..45"
2094  "...8A...C.F4...3"
2095  ".F9.75E4..B.6..."
2096  "5..1...8..6.4F.."
2097  "4...C....EA.B.2G"
2098  "2D.7.E5....6...1"
2099  "..BA.D..9...G..8"
2100  "...E.1..G2DF.59."
2101  "6...4C.B...73..."
2102  "A2..B.C.46E...7."
2103  "..1..2...9...8AD"
2104  "DC75.A..3...E.B."
2105  "..8...GEA..C2.5."
2106  ,
2107 
2108  // http://janko.at/Raetsel/Sudoku/596.a.htm
2109  // 84
2110  "B62...9...1...G7"
2111  "C.....7.6..A.1.9"
2112  ".1....A8..7.2..3"
2113  "..A831.CG2..E..."
2114  ".8..92.A..GD4..."
2115  "G.C.D8..F.529..."
2116  "...4.........D6A"
2117  ".5.B.C.17..3G8.."
2118  "..E12..9D.B.6.8."
2119  "9C7.........5..."
2120  "...A54.7..2C.F.G"
2121  "...FCD..4.A5..9."
2122  "...9..1E2.F83C.."
2123  "1..7.9..A3....D."
2124  "2.3.8..B.5.....6"
2125  "EB...3...7...G12"
2126  ,
2127 
2128  // http://janko.at/Raetsel/Sudoku/597.a.htm
2129  // 85
2130  "..6..1..4..F3.A."
2131  "7E..6G.3....FC.."
2132  "BC3..FD.6.9.G..2"
2133  ".....4E.CG3.B..."
2134  "1.E..C.....2.A.."
2135  "...AE6...4F..9.3"
2136  ".8.2..3F.C.1...."
2137  "34..8...B57..EC."
2138  ".B9..3CD...8..E5"
2139  "....9.F.GA..4.1."
2140  "A.4..E2...6BC..."
2141  "..8.A.....E..7.B"
2142  "...C.2A6.EB....."
2143  "E..8.9.5.3C..62G"
2144  "..B9....2.GD..5C"
2145  ".3.5C..E..1..4.."
2146  ,
2147 
2148  // http://janko.at/Raetsel/Sudoku/598.a.htm
2149  // 86
2150  ".FA..5...B7..E.6"
2151  "18....4B...C..G."
2152  "..G.7..CF....8.5"
2153  ".B9CG8.........."
2154  ".D..A.G..85....E"
2155  "69..3...1...C5.."
2156  "7.4B....G.A.2..F"
2157  "..8.5B6D..27...."
2158  "....8G..EC61.D.."
2159  "3..6.C.7....91.8"
2160  "..DF...5...9..73"
2161  "8....6B..2.5..E."
2162  "..........14EFD."
2163  "9.6....AD..F.7.."
2164  ".E..6...29....1C"
2165  "G.2..EF...C..4B."
2166  ,
2167 
2168  // http://janko.at/Raetsel/Sudoku/599.a.htm
2169  // 87
2170  ".3..6GF..C8....."
2171  "G..9.B.8...5.A74"
2172  "7..8.2..B..D...."
2173  ".EA.....3.6..9B."
2174  "..F.2....3AG...."
2175  "E7...........39G"
2176  ".9.A..31E6..FC.."
2177  "4.3..D.9C.B....E"
2178  "6....8.4A.2..G.C"
2179  "..G3..CFD9..4.A."
2180  "A85...........FB"
2181  "....5A7....6.2.."
2182  ".24..7.D.....16."
2183  "....1..3..C.2..8"
2184  "1A7.C...6.3.E..9"
2185  ".....6E..1F2..3."
2186  ,
2187 
2188  // http://janko.at/Raetsel/Sudoku/600.a.htm
2189  // 88
2190  "....47.....9B.1."
2191  "..5..9F2.6....43"
2192  "B..3.....E24..9."
2193  "..9.....A57..2.."
2194  ".DA4E..7...C.F.."
2195  ".1.6..4.E....8.B"
2196  "....81BF..4.5..7"
2197  "...F9A....D..E.4"
2198  "5.2..3....A71..."
2199  "6..C.B..G9FE...."
2200  "7.8....9.D..C.3."
2201  "..G.6...1..3E45."
2202  "..F..E8D.....A.."
2203  ".2..741.....3..8"
2204  "D6....5.92B..1.."
2205  ".A.EB.....C6....",
2206  // 89
2207  //".N..JG..O7591...8I....L.."
2208  "BNDAJG62O7591KHF8IP34CLME"
2209  "FG.M.B8...P.E...CJ..H...."
2210  "...........G.4.H.D.O.NJA2"
2211  ".....J.EN4.L6MA.B.2......"
2212  "HE..2..DC.....F4KMA.B.9O8"
2213  "M....62...47C19......E5.."
2214  ".I2.8M.JGL...ADN..K..3.F7"
2215  "..H3.5..89....I.J.....NL."
2216  "1B..9.FAP.6.N....537.H..O"
2217  "......1..N...O...LC.68.PG"
2218  "KOA.FNBH.....7.C.....M..6"
2219  "45.ECP.I..N.F.J1...MK.79."
2220  "I.L..8.O..9.P...A...2.1J."
2221  "..621.D.M.....B8LG..P..CH"
2222  ".HP.N7E.L1....3..B..O.G45"
2223  "....BIO....5.C.P...FN48E."
2224  "...FL.....2.DH..17..59O.."
2225  "..I.MF..2G.N...A6O.HC.PB."
2226  "72.1..L...IM.96E.45G....."
2227  "..9...7M..A.O...I...L...."
2228  ".C.JA.........1.....E.48."
2229  "O.BI.......PHL.6..1....5C"
2230  "G6M...N4FI8...K..H.E....."
2231  ".L..4.917....BE.G8F.M.I.."
2232  "8F......5.O3..4...9.....K",
2233  // 90
2234  //".N..JG..O7591...8I....L.."
2235  ".ND.JG6.O7591..F8IP.4.LM."
2236  "FG.M.B8...P.E...CJ..H...."
2237  "...........G.4.H.D.O.NJA2"
2238  ".....J.EN4.L6MA.B.2......"
2239  "HE..2..DC.....F4KMA.B.9O8"
2240  "M....62...47C19......E5.."
2241  ".I2.8M.JGL...ADN..K..3.F7"
2242  "..H3.5..89....I.J.....NL."
2243  "1B..9.FAP.6.N....537.H..O"
2244  "......1..N...O...LC.68.PG"
2245  "KOA.FNBH.....7.C.....M..6"
2246  "45.ECP.I..N.F.J1...MK.79."
2247  "I.L..8.O..9.P...A...2.1J."
2248  "..621.D.M.....B8LG..P..CH"
2249  ".HP.N7E.L1....3..B..O.G45"
2250  "....BIO....5.C.P...FN48E."
2251  "...FL.....2.DH..17..59O.."
2252  "..I.MF..2G.N...A6O.HC.PB."
2253  "72.1..L...IM.96E.45G....."
2254  "..9...7M..A.O...I...L...."
2255  ".C.JA.........1.....E.48."
2256  "O.BI.......PHL.6..1....5C"
2257  "G6M...N4FI8...K..H.E....."
2258  ".L..4.917....BE.G8F.M.I.."
2259  "8F......5.O3..4...9.....K"
2260  };
2261 
2263  const unsigned int n_examples = sizeof(examples)/sizeof(char*);
2264 
2266  int example_size(const char *s) {
2267  int l = std::strlen(s);
2268  int res = static_cast<int>(std::sqrt(std::sqrt(static_cast<float>(l))));
2269  assert(res*res*res*res == l);
2270  return res;
2271  }
2272 
2274  int sudokuField(const char *s, int n, int i, int j) {
2275  assert(example_size(s) == std::sqrt(static_cast<float>(n)));
2276  assert(i >= 0 && i < n);
2277  assert(j >= 0 && j < n);
2278  char c = s[j*n + i];
2279  if (!std::isalnum(c))
2280  return 0;
2281  if (std::isdigit(c))
2282  return c - '0';
2283  if (std::islower(c))
2284  c = static_cast<char>(std::toupper(c));
2285  // std::alpha(c) == true && std::isupper(c)
2286  int res = (c - 'A') + 10;
2287  if (res > n) return 0;
2288  else return res;
2289  }
2291 }
2292 
2293 // STATISTICS: example-any
SetVarArray y
The fields occupied by a certain number.
Definition: sudoku.cpp:248
void size(unsigned int s)
Set default size.
Definition: options.hpp:586
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
Definition: var.hpp:221
Options for scripts with additional size parameter
Definition: driver.hh:675
virtual Space * copy(void)
Perform copying during cloning.
Definition: sudoku.cpp:395
SetVarBranch SET_VAR_SIZE_MIN(BranchTbl tbl)
Definition: var.hpp:206
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
Definition: var.hpp:96
Example: Solving Sudoku puzzles using set constraints
Definition: sudoku.cpp:245
Example: Solving Sudoku puzzles using both set and integer constraints
Definition: sudoku.cpp:362
Use integer constraints.
Definition: sudoku.cpp:68
Slice< A > col(int c) const
Access column c.
Definition: matrix.hpp:183
NNF * l
Left subtree.
Definition: bool-expr.cpp:240
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
Definition: branch.cpp:39
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
Definition: channel.cpp:41
void propagation(int v)
Set default propagation value.
Definition: options.hpp:203
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntPropLevel)
Post propagator for .
Definition: count.cpp:40
Use "same" constraint with integer model.
Definition: sudoku.cpp:106
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
Definition: array.hpp:1056
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
Definition: region.hpp:380
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Definition: options.cpp:666
SudokuSet(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:251
Use set constraints.
Definition: sudoku.cpp:69
Example: Solving Sudoku puzzles using integer constraints
Definition: sudoku.cpp:97
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Definition: dom.cpp:40
SudokuSet(SudokuSet &s)
Constructor for cloning s.
Definition: sudoku.cpp:324
SetVarBranch SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Definition: var.hpp:221
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Definition: matrix.hpp:171
Integer variable array.
Definition: int.hh:738
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:400
void ipl(IntPropLevel i)
Set default integer propagation level.
Definition: options.hpp:216
Handle to region.
Definition: region.hpp:53
int example_size(const char *s)
The size of an instance.
Definition: sudoku.cpp:2266
Superset ( )
Definition: set.hh:645
SetVarBranch SET_VAR_NONE(void)
Definition: var.hpp:96
IntVarArray x
Values for the fields.
Definition: sudoku.cpp:100
Computation spaces.
Definition: core.hpp:1701
Parametric base-class for scripts.
Definition: driver.hh:729
virtual Space * copy(void)
Perform copying during cloning.
Definition: sudoku.cpp:330
int sudokuField(const char *s, int n, int i, int j)
Return value at position (i,j) in the example s of size n.
Definition: sudoku.cpp:2274
Use maximum afc.
Definition: sudoku.cpp:79
void decay(double d)
Set default decay factor.
Definition: options.hpp:238
SudokuInt(SudokuInt &s)
Constructor for cloning s.
Definition: sudoku.cpp:187
SudokuMixed(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:365
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:199
Gecode::FloatVal c(-8, 8)
SetVarBranch SET_VAR_AFC_MAX(double d, BranchTbl tbl)
Definition: var.hpp:136
bool same(const ConstView< ViewA > &, const ConstView< ViewB > &)
Test whether two views are the same.
Definition: view.hpp:676
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
Definition: var.hpp:236
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
Definition: bool-expr.cpp:234
Equality ( )
Definition: int.hh:901
Options opt
The options.
Definition: test.cpp:97
virtual Space * copy(void)
Perform copying during cloning.
Definition: sudoku.cpp:193
SudokuMixed(SudokuMixed &s)
Constructor for cloning s.
Definition: sudoku.cpp:390
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Definition: arithmetic.cpp:102
unsigned int size(I &i)
Size of all ranges of range iterator i.
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl)
Post propagator for for all .
Definition: distinct.cpp:46
Base class for Sudoku puzzles.
Definition: sudoku.cpp:60
Intersection
Definition: set.hh:661
union Gecode::@585::NNF::@62 u
Union depending on nodetype t.
Integer sets.
Definition: int.hh:170
const int n
The size of the problem.
Definition: sudoku.cpp:63
void branching(int v)
Set default branching value.
Definition: options.hpp:225
IntVarBranch INT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Definition: var.hpp:136
Passing integer variables.
Definition: int.hh:633
Passing integer arguments.
Definition: int.hh:604
SetValBranch SET_VAL_MIN_INC(void)
Definition: val.hpp:55
static const IntSet empty
Empty set.
Definition: int.hh:259
Sudoku(const SizeOptions &opt)
Constructor.
Definition: sudoku.cpp:83
Post propagator for SetVar SetOpType SetVar SetRelType r
Definition: set.hh:765
const int v[7]
Definition: distinct.cpp:259
struct Gecode::@585::NNF::@62::@63 b
For binary nodes (and, or, eqv)
Passing set variables.
Definition: set.hh:488
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
Definition: var.hpp:206
Post propagator for SetVar SetOpType SetVar y
Definition: set.hh:765
Set variables
Definition: set.hh:127
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
Disjoint union.
Definition: set.hh:660
Slice< A > row(int r) const
Access row r.
Definition: matrix.hpp:177
int main(int argc, char *argv[])
Main-function.
Definition: sudoku.cpp:410
Integer variables.
Definition: int.hh:347
bool assigned(View x, int v)
Whether x is assigned to value v.
Definition: single.hpp:43
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Definition: rel.cpp:43
Domain propagation Options: basic versus advanced propagation.
Definition: int.hh:954
Use lexicographic ordering.
Definition: sudoku.cpp:75
Equality ( )
Definition: set.hh:642
void solutions(unsigned int n)
Set default number of solutions to search for.
Definition: options.hpp:283
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl=IPL_DEF)
Post constraint .
Definition: minimodel.hh:1993
Post propagator for SetVar x
Definition: set.hh:765
No additional constraints.
Definition: sudoku.cpp:105
Sudoku(Sudoku &s)
Constructor for cloning s.
Definition: sudoku.cpp:88
Matrix-interface for arrays.
Definition: minimodel.hh:2048
Set variable array
Definition: set.hh:568
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
Definition: val.hpp:75
void model(int v)
Set default model value.
Definition: options.hpp:177
Gecode toplevel namespace
SetVarBranch SET_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Definition: var.hpp:236
Use both integer and set constraints.
Definition: sudoku.cpp:70
Use minimum size over afc.
Definition: sudoku.cpp:78
Use minimum size over degree.
Definition: sudoku.cpp:77
virtual void print(std::ostream &os) const
Print solution.
Definition: sudoku.cpp:336
Use minimum size.
Definition: sudoku.cpp:76