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