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