sudoku.cpp
Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 00002 /* 00003 * Main authors: 00004 * Mikael Lagerkvist <lagerkvist@gecode.org> 00005 * Guido Tack <tack@gecode.org> 00006 * Christian Schulte <schulte@gecode.org> 00007 * 00008 * Copyright: 00009 * Mikael Lagerkvist, 2005 00010 * Guido Tack, 2005 00011 * Christian Schulte, 2005 00012 * 00013 * Last modified: 00014 * $Date: 2010-10-07 11:52:01 +0200 (Thu, 07 Oct 2010) $ by $Author: schulte $ 00015 * $Revision: 11473 $ 00016 * 00017 * This file is part of Gecode, the generic constraint 00018 * development environment: 00019 * http://www.gecode.org 00020 * 00021 * Permission is hereby granted, free of charge, to any person obtaining 00022 * a copy of this software and associated documentation files (the 00023 * "Software"), to deal in the Software without restriction, including 00024 * without limitation the rights to use, copy, modify, merge, publish, 00025 * distribute, sublicense, and/or sell copies of the Software, and to 00026 * permit persons to whom the Software is furnished to do so, subject to 00027 * the following conditions: 00028 * 00029 * The above copyright notice and this permission notice shall be 00030 * included in all copies or substantial portions of the Software. 00031 * 00032 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00033 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00034 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00035 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 00036 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 00037 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 00038 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00039 * 00040 */ 00041 00042 #include <gecode/driver.hh> 00043 #include <gecode/int.hh> 00044 #include <gecode/minimodel.hh> 00045 00046 #ifdef GECODE_HAS_SET_VARS 00047 #include <gecode/set.hh> 00048 #endif 00049 00050 #include <string> 00051 #include <cmath> 00052 #include <cctype> 00053 00054 using namespace Gecode; 00055 00056 namespace { 00057 extern const char* examples[]; 00058 extern const unsigned int n_examples; 00059 int example_size(const char *s); 00060 int sudokuField(const char *s, int n, int i, int j); 00061 } 00062 00064 class Sudoku : public Script { 00065 protected: 00067 const int n; 00068 public: 00069 #ifdef GECODE_HAS_SET_VARS 00070 00071 enum { 00072 MODEL_INT, 00073 MODEL_SET, 00074 MODEL_MIXED 00075 }; 00076 #endif 00077 // Branching variants 00078 enum { 00079 BRANCH_NONE, 00080 BRANCH_SIZE, 00081 BRANCH_SIZE_DEGREE, 00082 BRANCH_SIZE_AFC, 00083 BRANCH_AFC 00084 }; 00085 00087 Sudoku(const SizeOptions& opt) : n(example_size(examples[opt.size()])) {} 00088 00090 Sudoku(bool share, Sudoku& s) : Script(share,s), n(s.n) {} 00091 00092 }; 00093 00099 class SudokuInt : virtual public Sudoku { 00100 protected: 00102 IntVarArray x; 00103 public: 00104 #ifdef GECODE_HAS_SET_VARS 00105 00106 enum { 00107 PROP_NONE, 00108 PROP_SAME, 00109 }; 00110 #endif 00111 00112 SudokuInt(const SizeOptions& opt) 00113 : Sudoku(opt), x(*this, n*n*n*n, 1, n*n) { 00114 const int nn = n*n; 00115 Matrix<IntVarArray> m(x, nn, nn); 00116 00117 // Constraints for rows and columns 00118 for (int i=0; i<nn; i++) { 00119 distinct(*this, m.row(i), opt.icl()); 00120 distinct(*this, m.col(i), opt.icl()); 00121 } 00122 00123 // Constraints for squares 00124 for (int i=0; i<nn; i+=n) { 00125 for (int j=0; j<nn; j+=n) { 00126 distinct(*this, m.slice(i, i+n, j, j+n), opt.icl()); 00127 } 00128 } 00129 00130 // Fill-in predefined fields 00131 for (int i=0; i<nn; i++) 00132 for (int j=0; j<nn; j++) 00133 if (int v = sudokuField(examples[opt.size()], nn, i, j)) 00134 rel(*this, m(i,j), IRT_EQ, v ); 00135 00136 #ifdef GECODE_HAS_SET_VARS 00137 if (opt.propagation() == PROP_SAME) { 00138 // Implied constraints linking squares and rows 00139 for (int b=0; b<n; b++) { 00140 int b1c = 0; 00141 int b2c = 0; 00142 IntVarArgs bc1(nn-n); 00143 IntVarArgs bc2(nn-n); 00144 IntVarArgs br1(nn-n); 00145 IntVarArgs br2(nn-n); 00146 for (int i=0; i<n; i++) 00147 for (int j=0; j<n; j++) { 00148 b1c = 0; b2c = 0; 00149 for (int k=0; k<n; k++) { 00150 if (k != j) { 00151 IntVarArgs bc1s = block_col(m, b, i, k); 00152 IntVarArgs br1s = block_row(m, b, i, k); 00153 for (int count=0; count<n; count++) { 00154 bc1[b1c] = bc1s[count]; 00155 br1[b1c] = br1s[count]; 00156 ++b1c; 00157 } 00158 } 00159 if (k != i) { 00160 IntVarArgs bc2s = block_col(m, b, k, j); 00161 IntVarArgs br2s = block_row(m, b, k, j); 00162 for (int count=0; count<n; count++) { 00163 bc2[b2c] = bc2s[count]; 00164 br2[b2c] = br2s[count]; 00165 ++b2c; 00166 } 00167 } 00168 } 00169 same(*this, nn, bc1, bc2); 00170 same(*this, nn, br1, br2); 00171 } 00172 } 00173 } 00174 #endif 00175 if (opt.branching() == BRANCH_NONE) { 00176 branch(*this, x, INT_VAR_NONE, INT_VAL_SPLIT_MIN); 00177 } else if (opt.branching() == BRANCH_SIZE) { 00178 branch(*this, x, INT_VAR_SIZE_MIN, INT_VAL_SPLIT_MIN); 00179 } else if (opt.branching() == BRANCH_SIZE_DEGREE) { 00180 branch(*this, x, INT_VAR_SIZE_DEGREE_MIN, INT_VAL_SPLIT_MIN); 00181 } else if (opt.branching() == BRANCH_SIZE_AFC) { 00182 branch(*this, x, INT_VAR_SIZE_AFC_MIN, INT_VAL_SPLIT_MIN); 00183 } else if (opt.branching() == BRANCH_AFC) { 00184 branch(*this, x, INT_VAR_AFC_MAX, INT_VAL_SPLIT_MIN); 00185 } 00186 } 00187 00189 SudokuInt(bool share, SudokuInt& s) : Sudoku(share, s) { 00190 x.update(*this, share, s.x); 00191 } 00192 00194 virtual Space* 00195 copy(bool share) { 00196 return new SudokuInt(share,*this); 00197 } 00198 00200 virtual void 00201 print(std::ostream& os) const { 00202 os << " "; 00203 for (int i = 0; i<n*n*n*n; i++) { 00204 if (x[i].assigned()) { 00205 if (x[i].val()<10) 00206 os << x[i] << " "; 00207 else 00208 os << (char)(x[i].val()+'A'-10) << " "; 00209 } 00210 else 00211 os << ". "; 00212 if((i+1)%(n*n) == 0) 00213 os << std::endl << " "; 00214 } 00215 os << std::endl; 00216 } 00217 00218 #ifdef GECODE_HAS_SET_VARS 00219 private: 00221 void same(Space& home, int nn, IntVarArgs a, IntVarArgs b) { 00222 SetVar u(home, IntSet::empty, 1, nn); 00223 rel(home, SOT_DUNION, a, u); 00224 rel(home, SOT_DUNION, b, u); 00225 } 00226 00228 IntVarArgs 00229 block_col(Matrix<IntVarArray> m, int bc, int i, int j) { 00230 return m.slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n); 00231 } 00232 00234 IntVarArgs 00235 block_row(Matrix<IntVarArray> m, int br, int i, int j) { 00236 return m.slice(j*n, (j+1)*n, br*n+i, br*n+i+1); 00237 } 00238 #endif 00239 }; 00240 00241 #ifdef GECODE_HAS_SET_VARS 00242 00247 class SudokuSet : virtual public Sudoku { 00248 protected: 00250 SetVarArray y; 00251 public: 00253 SudokuSet(const SizeOptions& opt) 00254 : Sudoku(opt), 00255 y(*this,n*n,IntSet::empty,1,n*n*n*n,n*n,n*n) { 00256 00257 const int nn = n*n; 00258 00259 Region r(*this); 00260 IntSet* row = r.alloc<IntSet>(nn); 00261 IntSet* col = r.alloc<IntSet>(nn); 00262 IntSet* block = r.alloc<IntSet>(nn); 00263 00264 // Set up the row and column set constants 00265 int* dsc = r.alloc<int>(nn); 00266 for (int i=0; i<nn; i++) { 00267 row[i] = IntSet((i*nn)+1, (i+1)*nn); 00268 00269 for (int j=0; j<nn; j++) { 00270 dsc[j] = (j*nn)+1+i; 00271 } 00272 col[i] = IntSet(dsc, nn); 00273 } 00274 00275 // Set up the block set constants 00276 int* dsb_arr = r.alloc<int>(nn); 00277 for (int i=0; i<n; i++) { 00278 for (int j=0; j<n; j++) { 00279 00280 for (int ii=0; ii<n; ii++) { 00281 for (int jj=0; jj<n; jj++) { 00282 dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1; 00283 } 00284 } 00285 block[i*n+j] = IntSet(dsb_arr, nn); 00286 } 00287 } 00288 00289 IntSet full(1, nn*nn); 00290 // All x must be pairwise disjoint and partition the field indices 00291 rel(*this, SOT_DUNION, y, SetVar(*this, full, full)); 00292 00293 // The x must intersect in exactly one element with each 00294 // row, column, and block 00295 for (int i=0; i<nn; i++) 00296 for (int j=0; j<nn; j++) { 00297 SetVar inter_row(*this, IntSet::empty, full, 1, 1); 00298 rel(*this, y[i], SOT_INTER, row[j], SRT_EQ, inter_row); 00299 SetVar inter_col(*this, IntSet::empty, full, 1, 1); 00300 rel(*this, y[i], SOT_INTER, col[j], SRT_EQ, inter_col); 00301 SetVar inter_block(*this, IntSet::empty, full, 1, 1); 00302 rel(*this, y[i], SOT_INTER, block[j], SRT_EQ, inter_block); 00303 } 00304 00305 // Fill-in predefined fields 00306 for (int i=0; i<nn; i++) 00307 for (int j=0; j<nn; j++) 00308 if (int idx = sudokuField(examples[opt.size()], nn, i, j)) 00309 dom(*this, y[idx-1], SRT_SUP, (i+1)+(j*nn) ); 00310 00311 if (opt.branching() == BRANCH_NONE) { 00312 branch(*this, y, SET_VAR_NONE, SET_VAL_MIN_INC); 00313 } else if (opt.branching() == BRANCH_SIZE) { 00314 branch(*this, y, SET_VAR_SIZE_MIN, SET_VAL_MIN_INC); 00315 } else if (opt.branching() == BRANCH_SIZE_DEGREE) { 00316 branch(*this, y, SET_VAR_SIZE_DEGREE_MIN, SET_VAL_MIN_INC); 00317 } else if (opt.branching() == BRANCH_SIZE_AFC) { 00318 branch(*this, y, SET_VAR_SIZE_AFC_MIN, SET_VAL_MIN_INC); 00319 } else if (opt.branching() == BRANCH_AFC) { 00320 branch(*this, y, SET_VAR_AFC_MAX, SET_VAL_MIN_INC); 00321 } 00322 } 00323 00325 SudokuSet(bool share, SudokuSet& s) : Sudoku(share,s) { 00326 y.update(*this, share, s.y); 00327 } 00328 00330 virtual Space* 00331 copy(bool share) { 00332 return new SudokuSet(share,*this); 00333 } 00334 00336 virtual void 00337 print(std::ostream& os) const { 00338 os << '\t'; 00339 for (int i = 0; i<n*n*n*n; i++) { 00340 for (int j=0; j<n*n; j++) { 00341 if (y[j].contains(i+1)) { 00342 if (j+1<10) 00343 os << j+1 << " "; 00344 else 00345 os << (char)(j+1+'A'-10) << " "; 00346 break; 00347 } 00348 } 00349 if((i+1)%(n*n) == 0) 00350 os << std::endl << '\t'; 00351 } 00352 os << std::endl; 00353 } 00354 }; 00355 00356 00363 class SudokuMixed : public SudokuInt, public SudokuSet { 00364 public: 00366 SudokuMixed(const SizeOptions& opt) 00367 : Sudoku(opt), SudokuInt(opt), SudokuSet(opt) { 00368 const int nn = n*n; 00369 00370 IntSet is0(0,0); 00371 SetVar dummySet0(*this, is0, is0); 00372 IntVar dummyInt0(*this, 0, 0); 00373 SetVarArgs ys(nn+1); 00374 ys[0] = dummySet0; 00375 for (int i=0; i<nn; i++) 00376 ys[i+1] = y[i]; 00377 IntVarArgs xs(nn*nn+1); 00378 xs[0] = dummyInt0; 00379 for (int i=0; i<nn*nn; i++) 00380 xs[i+1] = x[i]; 00381 00382 channel(*this, xs, ys); 00383 00384 IntArgs values(nn); 00385 for (int i=nn; i--;) 00386 values[i] = i+1; 00387 count(*this, x, IntSet(nn,nn), values, ICL_DOM); 00388 } 00389 00391 SudokuMixed(bool share, SudokuMixed& s) 00392 : Sudoku(share, s), SudokuInt(share, s), SudokuSet(share, s) {} 00393 00395 virtual Space* 00396 copy(bool share) { 00397 return new SudokuMixed(share,*this); 00398 } 00399 00401 virtual void print(std::ostream& os) const { SudokuInt::print(os); } 00402 00403 }; 00404 00405 #endif 00406 00410 int 00411 main(int argc, char* argv[]) { 00412 SizeOptions opt("Sudoku"); 00413 opt.size(0); 00414 opt.icl(ICL_DOM); 00415 opt.solutions(1); 00416 #ifdef GECODE_HAS_SET_VARS 00417 opt.model(Sudoku::MODEL_INT); 00418 opt.model(Sudoku::MODEL_INT, "int", "use integer constraints"); 00419 opt.model(Sudoku::MODEL_SET, "set", "use set constraints"); 00420 opt.model(Sudoku::MODEL_MIXED, "mixed", 00421 "use both integer and set constraints"); 00422 opt.propagation(SudokuInt::PROP_NONE); 00423 opt.propagation(SudokuInt::PROP_NONE, "none", "no additional constraints"); 00424 opt.propagation(SudokuInt::PROP_SAME, "same", 00425 "additional \"same\" constraint for integer model"); 00426 #endif 00427 opt.branching(Sudoku::BRANCH_SIZE_AFC); 00428 opt.branching(Sudoku::BRANCH_NONE, "none", "none"); 00429 opt.branching(Sudoku::BRANCH_SIZE, "size", "min size"); 00430 opt.branching(Sudoku::BRANCH_SIZE_DEGREE, "sizedeg", "min size over degree"); 00431 opt.branching(Sudoku::BRANCH_SIZE_AFC, "sizeafc", "min size over afc"); 00432 opt.branching(Sudoku::BRANCH_AFC, "afc", "maximum afc"); 00433 opt.parse(argc,argv); 00434 if (opt.size() >= n_examples) { 00435 std::cerr << "Error: size must be between 0 and " 00436 << n_examples-1 << std::endl; 00437 return 1; 00438 } 00439 #ifdef GECODE_HAS_SET_VARS 00440 switch (opt.model()) { 00441 case Sudoku::MODEL_INT: 00442 Script::run<SudokuInt,DFS,SizeOptions>(opt); 00443 break; 00444 case Sudoku::MODEL_SET: 00445 Script::run<SudokuSet,DFS,SizeOptions>(opt); 00446 break; 00447 case Sudoku::MODEL_MIXED: 00448 Script::run<SudokuMixed,DFS,SizeOptions>(opt); 00449 break; 00450 } 00451 #else 00452 Script::run<SudokuInt,DFS,SizeOptions>(opt); 00453 #endif 00454 return 0; 00455 } 00456 00457 namespace { 00458 00467 00469 const char* examples[] = { 00470 // 0 00471 "...2.5..." 00472 ".9....73." 00473 "..2..9.6." 00474 "2.....4.9" 00475 "....7...." 00476 "6.9.....1" 00477 ".8.4..1.." 00478 ".63....8." 00479 "...6.8..." 00480 , 00481 // 1 00482 "3..9.4..1" 00483 "..2...4.." 00484 ".61...79." 00485 "6..247..5" 00486 "........." 00487 "2..836..4" 00488 ".46...23." 00489 "..9...6.." 00490 "5..3.9..8" 00491 , 00492 // 2 00493 "....1...." 00494 "3.14..86." 00495 "9..5..2.." 00496 "7..16...." 00497 ".2.8.5.1." 00498 "....97..4" 00499 "..3..4..6" 00500 ".48..69.7" 00501 "....8...." 00502 , 00503 // 3 00504 // Fiendish puzzle April 21 2005 Times London 00505 "..4..3.7." 00506 ".8..7...." 00507 ".7...82.5" 00508 "4.....31." 00509 "9.......8" 00510 ".15.....4" 00511 "1.69...3." 00512 "....2..6." 00513 ".2.4..5.." 00514 , 00515 // 4 00516 // This one requires search 00517 ".43.8.25." 00518 "6........" 00519 ".....1.94" 00520 "9....4.7." 00521 "...6.8..." 00522 ".1.2....3" 00523 "82.5....." 00524 "........5" 00525 ".34.9.71." 00526 , 00527 // 5 00528 // Hard one from http://www.cs.mu.oz.au/671/proj3/node5.html 00529 ".....3.6." 00530 ".......1." 00531 ".975...8." 00532 00533 "....9.2.." 00534 "..8.7.4.." 00535 "..3.6...." 00536 00537 ".1...289." 00538 ".4......." 00539 ".5.1....." 00540 , // Puzzle 1 from http://www.sudoku.org.uk/bifurcation.htm 00541 // 6 00542 "1..9.7..3" 00543 ".8.....7." 00544 "..9...6.." 00545 "..72.94.." 00546 "41.....95" 00547 "..85.43.." 00548 "..3...7.." 00549 ".5.....4." 00550 "2..8.6..9" 00551 , // Puzzle 2 from http://www.sudoku.org.uk/bifurcation.htm 00552 // 7 00553 "...3.2..." 00554 ".5.798.3." 00555 "..7...8.." 00556 "..86.73.." 00557 ".7.....6." 00558 "..35.41.." 00559 "..5...6.." 00560 ".2.419.5." 00561 "...8.6..." 00562 , // Puzzle 3 from http://www.sudoku.org.uk/bifurcation.htm 00563 // 8 00564 "...8....6" 00565 "..162.43." 00566 "4...71..2" 00567 "..72...8." 00568 "....1...." 00569 ".1...62.." 00570 "1..73...4" 00571 ".26.481.." 00572 "3....5..." 00573 , // Puzzle 4 from http://www.sudoku.org.uk/bifurcation.htm 00574 // 9 00575 "3.5..4.7." 00576 ".7......1" 00577 ".4.9...3." 00578 "4...51..6" 00579 ".9.....4." 00580 "2..84...7" 00581 ".2...7.6." 00582 "8......9." 00583 ".6.4..2.8" 00584 , // Puzzle 5 from http://www.sudoku.org.uk/bifurcation.htm 00585 // 10 00586 "...7..3.." 00587 ".6....57." 00588 ".738..41." 00589 "..928...." 00590 "5.......9" 00591 "....936.." 00592 ".98..715." 00593 ".54....6." 00594 "..1..9..." 00595 , // Puzzle 6 from http://www.sudoku.org.uk/bifurcation.htm 00596 // 11 00597 "...6....4" 00598 ".3..9..2." 00599 ".6.8..7.." 00600 "..5.6...1" 00601 "67.3.1.58" 00602 "9...5.4.." 00603 "..6..3.9." 00604 ".1..8..6." 00605 "2....6..." 00606 , // Puzzle 7 from http://www.sudoku.org.uk/bifurcation.htm 00607 // 12 00608 "8....1.4." 00609 "2.6.9..1." 00610 "..9..6.8." 00611 "124.....9" 00612 "........." 00613 "9.....824" 00614 ".5.4..1.." 00615 ".8..7.2.5" 00616 ".9.5....7" 00617 , // Puzzle 8 from http://www.sudoku.org.uk/bifurcation.htm 00618 // 13 00619 "652.48..7" 00620 ".7.2.54.." 00621 "........." 00622 ".641...7." 00623 "....8...." 00624 ".8...456." 00625 "........." 00626 "..86.7.2." 00627 "2..89.751" 00628 , // Puzzle 9 from http://www.sudoku.org.uk/bifurcation.htm 00629 // 14 00630 "..6..2..9" 00631 "1..5...2." 00632 ".473.6..1" 00633 ".....8.4." 00634 ".3.....7." 00635 ".1.6....." 00636 "4..8.321." 00637 ".6...1..4" 00638 "3..4..9.." 00639 , // Puzzle 10 from http://www.sudoku.org.uk/bifurcation.htm 00640 // 15 00641 "..4.5.9.." 00642 "....7...6" 00643 "37......2" 00644 "..95...8." 00645 "..12.43.." 00646 ".6...92.." 00647 "2......93" 00648 "1...4...." 00649 "..6.2.7.." 00650 , // Puzzle 11 from http://www.sudoku.org.uk/bifurcation.htm 00651 // 16 00652 "....3.79." 00653 "3.......5" 00654 "...4.73.6" 00655 ".53.94.7." 00656 "....7...." 00657 ".1.82.64." 00658 "7.19.8..." 00659 "8.......1" 00660 ".94.1...." 00661 , // From http://www.sudoku.org.uk/discus/messages/29/51.html?1131034031 00662 // 17 00663 "2581.4.37" 00664 "936827514" 00665 "47153.28." 00666 "7152.3.4." 00667 "849675321" 00668 "36241..75" 00669 "1249..753" 00670 "593742168" 00671 "687351492" 00672 , 00673 // 18 00674 // The following minimal 25*25 Sudokus are from Alain Frisch 00675 // Sudoku website http://www.eleves.ens.fr/home/frisch/sudoku.html 00676 "...G...9..4.....6F..L8..." 00677 "CEIN.HDM.OF.1L..A..9PJ.4." 00678 ".....A...L..JBN.2.D.1...H" 00679 "P49...JB23.AD..7E..C5F..." 00680 "A1H....F.N5....I.BL...26." 00681 "....7..C.6...H4B..1....I5" 00682 ".F.P...I..B..7.5.L...9..." 00683 ".L6A...5OF.8P...K.NE..734" 00684 "B2.E..L...1J.5....O7.K.AP" 00685 "O.5.CB1.P....3EM....2L.H." 00686 "2..MJ.A...9.3.7......P.8C" 00687 ".....CF.DPG62N.E...OH.M.J" 00688 ".DL..OM..IE.B8..NH...3..K" 00689 ".CO1F.B.N.AH..P.78.JE...D" 00690 "E..6.....H......4M.KIB9.." 00691 "N.J..6......C..1.5.G..H.." 00692 "...75LG...6..1..CI..4.E.." 00693 "9K..6.....HGN.O2P.4......" 00694 ".OA..IP849...2.K3...7GN.." 00695 "..G....N...P.D9....A...C1" 00696 "J...M.NAFE.4..23.7....8L." 00697 ".....J.H9CD1LP..GO....4ME" 00698 "48NK..5.M......JL.......9" 00699 ".I.OG....835.A.DH..P....." 00700 "35......L.J..E....8IG.67B" 00701 , 00702 // 19 00703 ".N..JG..O7591...8I....L.." 00704 "FG.M.B8...P.E...CJ..H...." 00705 "...........G.4.H.D.O.NJA2" 00706 ".....J.EN4.L6MA.B.2......" 00707 "HE..2..DC.....F4KMA.B.9O8" 00708 "M....62...47C19......E5.." 00709 ".I2.8M.JGL...ADN..K..3.F7" 00710 "..H3.5..89....I.J.....NL." 00711 "1B..9.FAP.6.N....537.H..O" 00712 "......1..N...O...LC.68.PG" 00713 "KOA.FNBH.....7.C.....M..6" 00714 "45.ECP.I..N.F.J1...MK.79." 00715 "I.L..8.O..9.P...A...2.1J." 00716 "..621.D.M.....B8LG..P..CH" 00717 ".HP.N7E.L1....3..B..O.G45" 00718 "....BIO....5.C.P...FN48E." 00719 "...FL.....2.DH..17..59O.." 00720 "..I.MF..2G.N...A6O.HC.PB." 00721 "72.1..L...IM.96E.45G....." 00722 "..9...7M..A.O...I...L...." 00723 ".C.JA.........1.....E.48." 00724 "O.BI.......PHL.6..1....5C" 00725 "G6M...N4FI8...K..H.E....." 00726 ".L..4.917....BE.G8F.M.I.." 00727 "8F......5.O3..4...9.....K" 00728 , 00729 // 20 00730 "5.PC..7..J..I...3..H.M.2L" 00731 "H.......F..DA..N.G...9..P" 00732 "...3LCP2.54.71.B....J.8.." 00733 "76M8...3A...H..C.D.FO...." 00734 "...DK..GI..B.L.6.8.14...." 00735 "A......M....D.6.N.P....O2" 00736 "...E5BLF..92..3AJC..6I..." 00737 ".PNJ.6..E7A.8..IM.OL1.G.C" 00738 ".L3...O.N.5.KI.46.....9E." 00739 ".I.G.A..28.MBP...E..HJ3.7" 00740 "J.74.L..D1O96.A3.M...GI.." 00741 "E...1...K....J...P6.7.C.9" 00742 "8M..A9JO.F.P..1...4.E3N6." 00743 "...I.3.7.......EL.CD..H.." 00744 "....DE2..P...N.........K." 00745 ".O.7.FKI1..GJ.N.....9.P8." 00746 ".89..H..BNM73D.KFJ..I.6.A" 00747 "PDBN...9M..C.....O.6..7.." 00748 ".F.K...4..LA9B..C.E75..GN" 00749 "G.A.....7.8.....H....O.3." 00750 "B...C...4......8K.3.P...." 00751 "DHE5..FA...J.3..B.2.KC.98" 00752 "...F...5....N..J9......I." 00753 ".J...P..O.BK....I.M.3..5." 00754 "9...8.B.6.D.M.I..H.5G.J4." 00755 , 00756 // 21 00757 "..6F.....5..3.....H..A.M2" 00758 ".....3....I8.A.MC.KJ.LNG." 00759 ".I.7N..K.2..6...3D..B.O85" 00760 ".3A.PF.D8OBK7.2....L6.9H4" 00761 ".K..CBML.....O.A8.G4.D..." 00762 "1.4.AGL..M5..F.O.9....P2." 00763 "..I.........8......N4E..." 00764 "J.C8.1.6.3.LO.K7AG2P9.H.." 00765 ".2.3BH..9.A...G......O..L" 00766 ".H..M8.J.....NI1.LEF....B" 00767 "I5..4.....G.27..K..3.M..H" 00768 "P..E..I.A..3B.8....G.2..." 00769 "AJ......NFK.I.O9476..G.1." 00770 ".976...E3H....M5.F......O" 00771 ".F.M3.5.GKC4.HJ.N.....ID7" 00772 "..L1K..9.J37.ID..B..E6..." 00773 ".82OH.1..PNML...E..C...J." 00774 "....JLFN.B..G..6M..H..D.9" 00775 "...C.A...I.6.......K.5..." 00776 "E.G.I.....O....J.8F......" 00777 "..M4..9.D.7.K.FE.3O......" 00778 "H.N.....14E..B3L..8I...AG" 00779 "K.O.62.PM...N..H...18C.9." 00780 "LC..8.3...2...H.G...J..4E" 00781 ".B..9NK.E....C6.P.4D.71OI" 00782 , 00783 // 22 00784 "A..F.N......M28DC.LI7..OJ" 00785 "..B...D.M.6....9.....2A.." 00786 ".2..I.56.B...J.MEH......." 00787 "O7...HE...BA..G2........L" 00788 ".H6J.2...G.7NDP.A...8..C." 00789 ".PN35..B..869.2.GA..K.C.." 00790 "....EM13OD.N...49K...7..." 00791 "9G..C....IJF5.B..7.3....." 00792 "HD.....JN....7...EF....9." 00793 "1.OA..G.KL....H..B.CP...." 00794 "..CE.......2..9I....3...." 00795 "FJ..83P.E..K7.NL15H..I2.." 00796 ".4..GJ...6DIB...P...AHL.C" 00797 ".1I.2.M....83.F..4.NBE..." 00798 "L3M.OD.H.AG..4.....69...F" 00799 ".8...5H.3.....M...D..K..4" 00800 "3..4..AEDO7J...5..9..G1.." 00801 "..2N9.8F.P.OIGC.L6..E.H.." 00802 "C...1.7..K.L6.4EO.8.5...N" 00803 ".IG.H..M..E...1A2N4..8.F." 00804 "6..5J..N1...2..H.IGA...P8" 00805 ".L...O...H...C....M5G..A." 00806 "..F...3C.7.P..5N..B..DMH9" 00807 "291D..6..M..H.7.3.J.N..B." 00808 "....MK..29F.G.DO4...6.E35" 00809 , 00810 // 23 00811 "....B12O3..D..F..KPL.E4.7" 00812 "1M..GL..H..K.A.....39.P.." 00813 ".8.3.4.....7..6.F.....CK." 00814 "P.O...758.2..MC.....1L.A." 00815 "...HFK6.A..8...9B...2...J" 00816 "91.KJE..L.5O..GD.....4..." 00817 ".I..3..D.2.....C4MLAK..N." 00818 ".4..6IA.P7.....B9......3." 00819 "M.F...4.J...8....N.H.1G7." 00820 "..5P.N.....C.731.I.E.9A.." 00821 ".....GO.KDL......BA......" 00822 ".3A..F...9..K.EI5.7..6.DN" 00823 ".G.54.L.....PH..3F6....2." 00824 "....P.....G..2D.OH.1B...C" 00825 "6.EM.7N....3.B4..DC..K1P." 00826 "B.9.....I..5N...7OGK...46" 00827 "OF.GD6HP..JM..BA8.I.C...." 00828 "8.L7...........P.3M5...92" 00829 ".EM.....45IF7....2.CJ8DL." 00830 ".6.4.8..NA.2......9....GI" 00831 "2..A1DCN..3G.F5.L..I..O6H" 00832 "..BIO..1.H.L...G........." 00833 "C.P.....M8.9O..5A..N.JK.D" 00834 "H...N...FOA4..73....5..CM" 00835 ".D4..3...6BE..N.2JH8..L.." 00836 , 00837 // 24 00838 "LJ.FH2...K....359.E.B6.N." 00839 "...EML1FC.PJ.A.8I....2.K4" 00840 "9........G1..6..K...PAL3C" 00841 "P...C34..8.N7.........DE." 00842 "...7....E..IO...124.J5.F." 00843 ".8.L.PA.2..31FG....N..C.I" 00844 "F.G......M........2.K..1." 00845 "....2KH6.JOD..9.L..G...B." 00846 ".6O3..G...4.NJ.H.PB...5.9" 00847 "I...K..LBN...E.76.A....8." 00848 "D.B.L......8.3.C.KM.6...." 00849 ".C593.I.N4.26MB..1..L.K.." 00850 "M.F6......DA45.9..N.I3..B" 00851 ".G..79.H...KJ...4...AN.2." 00852 ".KH...BC....LON..7..D.8.F" 00853 "2..B...MP....7OEJ4....6.1" 00854 ".4....2O.9......N..1....G" 00855 ".....G.JF.2..L.6.5......." 00856 "C9A.G...H1...PJ..L.3.8.MN" 00857 "...1......M.....O.P8.K3J." 00858 "...N.HP.K25G3..JC8..1M..." 00859 "..2K.FC34.A....N7..9.LB.." 00860 "..65DJ..L..C.4.1...BGF..." 00861 "OF..E..7.B.......634...D." 00862 "G.3..N.I9D7PM8KF2....4..." 00863 , 00864 // 25 00865 ".1..I8.P..6.N...BD...3O.." 00866 ".9.6...E.M43.8..AK.2J.1.." 00867 "...JKL...FA...P.I4...DB.." 00868 "E...P.I.B.7.1..J.HC...98." 00869 "..5M8GJ.KD.O...N3..1AI..." 00870 "K.2C4.M.N..J..I.......H.5" 00871 "N..B9O.D...KH6.E...C...7I" 00872 "DE..JK4.....L.1B7..68PN2." 00873 ".....P...C..F.7...L.O9..." 00874 "...35.H......92..M.4.EC.1" 00875 "P..IL..H.........1..3.D.." 00876 "....B9..8.3I5.C...K...F1." 00877 "FH....2O..D.4M.P...A...GC" 00878 "JA.......KF.......4.EOMIP" 00879 "3.7GNF...A.2OB9C.E5.HJ..." 00880 "2.I.1.......AO5.P...K.3.." 00881 "..H....L..M.CIJ..7...4..." 00882 "GO.9..KF.I.P3...E.HJ...N7" 00883 "5.37...B.E...4N..O.8....." 00884 "4B...7.9O.HL..E2C3.K51.M." 00885 "L.O42...D..AJ.8...GH.N..E" 00886 "9M.8.H..LG1..N..5.E..F7B." 00887 "......FAC..5M..I6J.B4...G" 00888 "...F..82..P.E......36HK.L" 00889 "B.J.G5...O.H2..98.7......" 00890 , 00891 // 26 00892 ".CNPHK.53.O9F..D.78..J..." 00893 "J.....F.DB...7.G..PAE...L" 00894 ".6.........5.4A......I..." 00895 "A..L.6.E.1JG....5.H.2...9" 00896 "..G4..P...E2N.M...C..FB.1" 00897 "..PKJ...G41O..C.N..H....." 00898 ".M..I5L97J.3H...E2.8...D." 00899 "1.4..ON.83G.P.D59..C.BH.." 00900 "..2.9.......4.F.3.6..O.7." 00901 "3F.7.MEC..5...2..4K.LN8.." 00902 "...I........MF7.6AOG..LE." 00903 "C1.3..JG..D.9...4..N...68" 00904 "...M7L9..NHA...FJ.I..3.C." 00905 ".A...P...5...E3.8M..K4OFG" 00906 ".....C.6KIP...8..3.DJ...." 00907 ".2.J...3C..7.D.9A.EF6L..." 00908 "4...3.6N.....L9.H..P8...2" 00909 ".9.C.4H.......P....1..FJ3" 00910 ".LD.K87.1.BM5AJN....4H.G." 00911 ".B..MAI........47O.LD...." 00912 ".G....3....F..1..9..M..K6" 00913 "P7.A..B8.......2....I.3.." 00914 "M..O....9K2..6..1.N.FE.L." 00915 "....E...A..N.J.IG8...C.9." 00916 "6KL.4...FCI.A.....5J.2D.N" 00917 , 00918 // 27 00919 "E..I...M......L....D...BK" 00920 "F..BH9.K.A2.7..E4.P.6..M." 00921 ".6.J..PD8FE.IM...K...54.." 00922 "L...8E...IA..HC........7J" 00923 ".....7H.4.JK..DOFC....9I." 00924 "9...7A.5.B.M34E.KDJ8....." 00925 "8...BD....O..7....CP.E.6." 00926 ".1.3..8....D...2.ML.B..5A" 00927 ".E2.A.O.7..1..I.659..8LD." 00928 "KF..M2...PL......A.G..N3." 00929 "...76N.1..CBG...DPK..O.J2" 00930 ".JK...6B.9..P.7.N.EMFDG.5" 00931 "N....G.F.8....OH9.2...E.7" 00932 "....4.3....F9.....5.NC.A." 00933 "M.A.GL.J......5..4.7.91.." 00934 "C.8NE.5..6..M.....BJ17..H" 00935 "7.6...NL.41.AC.I8...GJ3.." 00936 "...53P.GM2.L..F.....K.68." 00937 "J.4.D..H..IG..8K..35.N.FL" 00938 "P.F...93.D.....A.1......M" 00939 "..7.I...1...DF..PJ.4.MA.." 00940 ".KN.....5H..O.63.E.2....4" 00941 "....1...O..A2..DCH8B..KE." 00942 "3.HA.6BP.....J1957O..28.." 00943 "42JO.I...K5C......6.P.B.." 00944 , 00945 // 28 00946 "...G87..O..F.N..CH6..D..2" 00947 "C16..N....DL.3.E........." 00948 ".LN.EK..D..O.G6.412....5H" 00949 "K...2........59M...P..3.." 00950 "..A9.M.6....8.E7O3..K..LB" 00951 "7..8B.1.EP.....4.L.6.C.9." 00952 ".3.6...9.85.A2F.....B.EP." 00953 ".D4K.L..NA....C.M.E..7..." 00954 "L..P.3H.CG.7....DKF..I6.." 00955 "5EH.G.7.6.1....J....D3K.O" 00956 ".6.....G.K.E..I2.4J......" 00957 "..ICFP.8H7.2.O.B.NM5..G.." 00958 ".M..D9..BE..J..F..I7..LAK" 00959 ".BE.L...31.M7FK..C9..8.DN" 00960 ".2O......D38C...E...F.P.." 00961 ".A.....M..NB..3.J.7E8..2." 00962 "...O...B..6..C.8KG4..5D7M" 00963 "....M8..I..9..AL1.O.3HBNG" 00964 ".C..4....L.....D.F......." 00965 "J..5NF..G...H..6..C..1..." 00966 "D..N..O....G9.J.A..I...8." 00967 ".F.H1BN.K.O.4.8.6.3.9.M.." 00968 "B...I....9K..6..2...G.H1." 00969 "O...7.CJMI25N...HDKBPFAE." 00970 ".....28.F..C........O.JK." 00971 , 00972 // 29 00973 "9.K..6D.I5...........H..." 00974 ".I.E..BK...GN...6.L...3.." 00975 "7....2..L8E.K.D1.P5I.6..A" 00976 "..N.LEH.A32..CM9........." 00977 "..2....9N...3.IC...J.KF8." 00978 "......GA..C.7JPNI3....6L." 00979 "....E.J.8K..I.....97NG2.B" 00980 "O7..3HI...M.....DCF5..914" 00981 "L.M.4.3.19.D..2......F.K." 00982 "B....F...O9.6ANG.2.PH.E.5" 00983 "8KDM...5.1....G......P..6" 00984 ".4.H.L.C..J2....G..3ION.." 00985 "C.A..J..E...1K......92.5." 00986 ".9O.NP.2...IA....H..G..7." 00987 "...I5..O.N4.H...2DCKJ...E" 00988 "56....1.D..AJ.....7.L.O.." 00989 "K.8.H.7.9.5....AC..O..G6F" 00990 "3..........O..C.F.P6K.5.." 00991 "...OC.4J2.3E.9...N.H7..P1" 00992 ".B.7.K.....6.MH.LJ..A...." 00993 "I..4.........P..E7D9O.B.H" 00994 "E.3G.OP...I1CBL..FN4..82." 00995 ".A..9N.8.E...73O..H....4." 00996 ".M.C.3....DK..EI......JG." 00997 ".HP..D..FB...NO.1KJ8.AL.." 00998 , 00999 // 30 01000 "....L.1.8H.CO..P....FA..." 01001 "P1.2.4CO...K..A..3H8...7." 01002 "I..H.G.5.B.6.M..A24.K..9." 01003 "....6I.KF9..5.P.J1.BDCE.M" 01004 ".A....2...F..L..E.M.6.5O3" 01005 "7..1.C...8.L9..4P.5.G.K.." 01006 "JO.5H.M2.I.7.F.6D..A4..NE" 01007 "E.3.NO....K2...LG..7JM..." 01008 ".9F.CJ.H....A.NKB.1..2.5." 01009 "2LB...5..7.P36H.M..N...1D" 01010 ".....P..B....46.HJ......." 01011 "B4..7LI.C.GD2...KA.3H...." 01012 "K5......6J1.........27O8P" 01013 "LP...5K.G..JB3.......1.M." 01014 "..EG...4.F.NKC...O..9.B.." 01015 "..MI...D32AGP..5O...74.BN" 01016 "FC74.....1..LO..8...5.D.J" 01017 "..JN....H...E.I...DPA3.6." 01018 "AE.......O3F..5.........H" 01019 "...8..6......24.9G....I.1" 01020 ".M....8.9..O1.F.C.EL3...A" 01021 ".N...E.3.....I7M1...ODG.K" 01022 "1......P.N9..D..5........" 01023 ".I.P..FGOCMA.......J.5..2" 01024 ".GK....7...3.....92..B.L4" 01025 , 01026 // 31 01027 "...H....GKM.43..B.D......" 01028 "15I.C....8B.6D.7G....A.H4" 01029 ".7...F..B...J.E16.N....3." 01030 "...D.1...6L7.H.5K....P98F" 01031 "KJ.AF.5CHO...NP2M.....B.." 01032 "4..K..I9.M.DNP..A.3..E5O6" 01033 "PGC...HE.....I5..M...7..J" 01034 ".B.EJ..G.5..L....D.48.2.." 01035 ".D....N.4.J.2A..H..5..F1." 01036 "8....AJLD.7..OM...1B....P" 01037 "CH...N..7.........B3....." 01038 "I..O.JL..P5...3......KH.8" 01039 "D.259.E......6.......L3.." 01040 "...3K6.B.AE..74N25H..G1.." 01041 ".L.B..41.HC...G.OIP8..MN7" 01042 ".........2.C.4.L....69.I5" 01043 "N...7.C...69.5.A......PKL" 01044 "....L.G...13.BOMP.82..D7H" 01045 "...C.H..5.P.E.K...I7....." 01046 "JO..P.96ABI8.....C..N..4G" 01047 ".NA8H.32..O4..IB..L9G..J." 01048 "..4.GD..M.3..27INJ.O....." 01049 ".C9L..A..J.....6.2..I..F." 01050 "BK...4..F.A.CL..87.1.O.M." 01051 "6..P.I.5...M..N....F....D" 01052 , 01053 // 32 01054 ".6OL.3GB.I.1F.EP..9..24.." 01055 "..1.P.....K....N.2.....ID" 01056 "2.8.K7..J...6..1F.......A" 01057 "...D.8.4..29..LJ7.HMKPF.." 01058 "..I.9N...A..P.M.DK...E5.." 01059 "94.N...5..F..E.C182..BG3." 01060 "8D..3HC....6G.....P.F.72I" 01061 "C..I.E.7D....8BG.F...6..." 01062 "......L....N.24..I..1K.DJ" 01063 ".27HG.NF......I..L..E.A.." 01064 "L...N.I8F6.H.9K.3O..B..5P" 01065 ".9...L..25.B14F.N.JE...7K" 01066 ".1...9B....GJ.8.A.5C....." 01067 "....CPK..J....5.M.7.6.H.3" 01068 "..F7..3..O..N..B8....421." 01069 "AM.8....P...71..26N...3G." 01070 "P....D.2.78.O..5CJ.GA.BH." 01071 "6..4.F...3...K9A..1...J.M" 01072 ".I2.E......JM.N...B98..P." 01073 "FC..7..6.EI.D.G...3H5..KN" 01074 "I8NO.4F.9..DB....5......." 01075 "5..1...G3.MIH.A.9..N....." 01076 "KG.62..1.....L3.....IJE.F" 01077 "....D.6.AC4.9.....OL.HP.." 01078 "..EA.5O.L.6.......D...9N." 01079 , 01080 // 33 01081 ".CH3.L..D4F..I.........1." 01082 "G..K.....7.O.......L.42N." 01083 "A.D...5O8B...39G.4..I...L" 01084 "1E2OB....A8N..6FCD9.H...G" 01085 "IN..4..3.....J..5OM....9." 01086 "...JEMP..9G8..D7......BA." 01087 "B.M9..L....6...2.FI.KJ..." 01088 ".LN.386A..BH....O.J.2..7." 01089 "7A6..2..3N.....4KP..G8HIC" 01090 ".1.....J.CK3....HB..5L4.." 01091 ".H......P.I.57....G..21B4" 01092 "....7.....EP1....3.2..A.." 01093 ".59.1FI.L8.MJG.B..AH....E" 01094 "NI..D....O3K..A.P9..8F..." 01095 ".O....A..E2.8.HN.J7.P...." 01096 ".MC..P....H2...A7..ID...1" 01097 ".6.....M.J.14.BDG.3.O9F2." 01098 ".......CG.........4...M.." 01099 "HDL...8N7.......FK2C.E..B" 01100 "..KP2I.F.3...N7J.E.6..L85" 01101 "D.E...C.4.7B..I....A.1..M" 01102 "J..M..7..D.A..4...ONBG..2" 01103 "9.7.6..K..P..O....D...8.." 01104 ".2IN..GE1.D..8...MK.CPJH." 01105 "FG..8B.2.L..KH.....1.5E..", 01106 01107 // 55 16x16 instances (mostly harmless) from janko.at 01108 01109 // http://janko.at/Raetsel/Sudoku/301.a.htm 01110 // 34 01111 "D92.....G...43.." 01112 "4CF.....9D.2.6EB" 01113 ".E.1....F.8BC..A" 01114 "G56.....A3C....1" 01115 ".7G5A8....61...." 01116 "2...C....B7....." 01117 "..AE.964..G....." 01118 ".F9.5.7.4......." 01119 ".....29....A.C.." 01120 "........645D.1.." 01121 "....D....1.C.B7F" 01122 ".....E.C2G...8A9" 01123 "B..9.G52.....EF6" 01124 ".256..F.....D.B." 01125 "E13.6.D........7" 01126 "A...8BC3....954." 01127 , 01128 01129 // http://janko.at/Raetsel/Sudoku/302.a.htm 01130 // 35 01131 ".DG1.C.BE..3.4.A" 01132 "..7B.62..41...59" 01133 ".......D.....G.." 01134 "..49.7.3.B6..FD." 01135 ".9..G...C......4" 01136 "G..46....9F.3.B." 01137 ".C5.1...BE.86..G" 01138 ".B.....E2G...D.." 01139 "..3...596.....1." 01140 "F..C2.76...B.E3." 01141 ".1.8.4D....7F..5" 01142 "E......F...D..9." 01143 ".AB..FG.1.3.C8.." 01144 "..2.....F......." 01145 "8F...BC..62.97.." 01146 "1.6.A..59.C.GB2." 01147 , 01148 01149 // http://janko.at/Raetsel/Sudoku/303.a.htm 01150 // 36 01151 ".....D.3..7F.A.." 01152 "...B1.F8....26.." 01153 ".F.3...6D..AC..." 01154 "AGC.9.5..8....BD" 01155 "E.FG5...7...A.9." 01156 "2.7.....89A36.F5" 01157 "...1.9...CBE...." 01158 ".3....A.....BG2." 01159 ".1B2.....7....6." 01160 "....B16...3.9..." 01161 "5D.4F3EA.....2.B" 01162 ".E.A...9...D83.C" 01163 "4A....B..E.8.FC9" 01164 "...EA..G1...D.4." 01165 "..GC....FD.B1..." 01166 "..D.47..6.C....." 01167 , 01168 01169 // http://janko.at/Raetsel/Sudoku/304.a.htm 01170 // 37 01171 "....9...5...3B.." 01172 "...D13.7.4.....F" 01173 "637...2..81AC9.." 01174 ".2G..5.......18D" 01175 "...F4...3...8C.." 01176 "E.D.7..6..G...A5" 01177 "C5.6..3....F.2.." 01178 "4.A...1D72.9..B." 01179 ".E..D.9CA6...F.1" 01180 "..9.5....E..D.26" 01181 "B6...4..D..5.7.A" 01182 "..F4...A...C9..." 01183 "AB4.......2..G6." 01184 "..68FBD..5...A47" 01185 "1.....6.9.E4B..." 01186 "..32...5...B...." 01187 , 01188 01189 // http://janko.at/Raetsel/Sudoku/305.a.htm 01190 // 38 01191 "..16.E.8.BF.4..." 01192 ".5...9D......A73" 01193 "..3...B.78.D.6.." 01194 "......1...9...BE" 01195 "C..1D..6B5..7.A4" 01196 "...5.F.98..32.DG" 01197 "3.....C..D.A5.E." 01198 "....3B5.F7...9.." 01199 "..5...6C.2AE...." 01200 ".3.BE.2..4.....9" 01201 "F9.2A..B5.7.G..." 01202 "EA.G..756..BD..1" 01203 "6C...8...9......" 01204 "..9.6.47.E...D.." 01205 "2GE......C6...F." 01206 "...3.CG.2.D.65.." 01207 , 01208 01209 // http://janko.at/Raetsel/Sudoku/306.a.htm 01210 // 39 01211 ".....D5..7.169.." 01212 "..4..2BE8.G..A.." 01213 "8DA....752..BGF." 01214 "G.9EA.86..3F2..." 01215 "C..4G1.....7F..." 01216 ".G.A...315.6..C8" 01217 "E.5..F7.4G..1.A2" 01218 ".91..BE...D.54G." 01219 ".68D.3...C5..B9." 01220 "4E.5..9B.31..F.G" 01221 "3B..E.G1A...C.4." 01222 "...95.....F83..7" 01223 "...C9G..F1.5D8.B" 01224 ".468..DFC....3E5" 01225 "..2..E.A7DB..C.." 01226 "..EFB.3..86....." 01227 , 01228 01229 // http://janko.at/Raetsel/Sudoku/307.a.htm 01230 // 40 01231 ".BC..32...9..D.." 01232 ".3..CB...52A.9E4" 01233 "7E.A...D8.6B2..5" 01234 "..9F..A.DC7.B6.." 01235 ".15..2.E..3...4." 01236 "4GD81.3C...7..6F" 01237 ".C.9....E.4.G..1" 01238 "..E3..59G.FD.B.." 01239 "..A.2E.FC9..84.." 01240 "B..E.9.4....F.A." 01241 "16..A...57.F3E9B" 01242 ".9...6..4.E..7G." 01243 "..64.C85.2..DA.." 01244 "E..DB1.23...6.59" 01245 "C5G.9D4...1E..2." 01246 "..2..F...DA..CB." 01247 , 01248 01249 // http://janko.at/Raetsel/Sudoku/308.a.htm 01250 // 41 01251 "G.E37..1.....6.." 01252 "96..E..3..G5D.F." 01253 ".7..64.CF31..29E" 01254 "....F...8.9E437." 01255 "6AF...D.3..1...." 01256 "..1...B5.8F47..3" 01257 ".83B2.47.G....61" 01258 "..79.6...EC..8.G" 01259 "E.C..2A...8.FG.." 01260 "25....C.GA.78B4." 01261 "7..AD3F.24...E.." 01262 "....G..B.1...C52" 01263 ".4A2B5.D...8...." 01264 "FE8..G2A1.73..C." 01265 ".C.78F..4..2..E5" 01266 "..9.....E..G34.8" 01267 , 01268 01269 // http://janko.at/Raetsel/Sudoku/309.a.htm 01270 // 42 01271 ".G.4..1E6.9...2." 01272 ".D..4G.C.....9F7" 01273 "..79.D...5C.B.G." 01274 ".EFC7...G..D.5.3" 01275 "5...C...E6BFD..." 01276 "...1...5..D.CB.2" 01277 "7.CG29.D3...E8.F" 01278 "94...EGB.2.C...." 01279 "....E.2.583...CD" 01280 "3.D5...89.FB7G.E" 01281 "4.1E.F..A...3..." 01282 "...F1B3G...E...9" 01283 "F.9.8..1...G23D." 01284 ".A.B.4D...7.5F.." 01285 "8CE.....1.25..7." 01286 ".7...5.3F9..G.8." 01287 , 01288 01289 // http://janko.at/Raetsel/Sudoku/310.a.htm 01290 // 43 01291 "...4.1.9..7...B5" 01292 "6E..2.8....CGA.." 01293 ".51....B.D....6." 01294 "B.9..E..G..A...7" 01295 "..7.5F9G..48...." 01296 "..29..3..F..5.7." 01297 "G.BD...837.E..94" 01298 "......7E.1.6A2G3" 01299 "94GA7.2.63......" 01300 "5B..A.E18...79.2" 01301 ".1.8..6..4..BD.." 01302 "....G8..EB92.4.." 01303 "D...9..A..1..G.6" 01304 ".3....4.C....1E." 01305 "..4B6....E.7..2A" 01306 "F9...5..A.3.4..." 01307 , 01308 01309 // http://janko.at/Raetsel/Sudoku/361.a.htm 01310 // 44 01311 ".G..5.2.E.FA.4C." 01312 "AB..G....35.17D9" 01313 "53..4AC..DB....." 01314 ".6.C3B..2.8.5..." 01315 "1...A....E.D9CG3" 01316 "GDA9.4..B.1.6E.." 01317 ".FB.1..E9....D.8" 01318 "C..3.59G48......" 01319 "......F38G2.7..4" 01320 "6.3....A7..9.8E." 01321 "..CE.9.1..4.DG35" 01322 "89GD2.4....6...C" 01323 "...G.C.4..958.7." 01324 ".....1A..F78..42" 01325 "4871.3G....2..9A" 01326 ".C9.72.8.6.4..1." 01327 , 01328 01329 // http://janko.at/Raetsel/Sudoku/362.a.htm 01330 // 45 01331 "A...18..79..C..6" 01332 ".37.A2...FD...E9" 01333 "G14D..5...8C.A.." 01334 ".268.E7.3A....D5" 01335 "3...D1...7A2.8.4" 01336 "7CF.9..4....D.2." 01337 "5..63.A28...1CF." 01338 "...1.6...3FD..5." 01339 ".A..FC6...9.3..." 01340 ".D2F...3A5.1E..8" 01341 ".9.G....D..7.F1C" 01342 "E.C.G9D...3F...7" 01343 "17....9B.2E.43C." 01344 "..9.E3...C..5D7F" 01345 "FE...AC...G5.29." 01346 "D..C..2F..73...E" 01347 , 01348 01349 // http://janko.at/Raetsel/Sudoku/363.a.htm 01350 // 46 01351 "3.8.BD..5F72E..6" 01352 "..G..4.7E..6F5.." 01353 ".AF.2..C....9G73" 01354 "59C...FE.AG....." 01355 "C5..1..F.4.G.E.7" 01356 "F..2.C..B13...GD" 01357 "4..B73.D....C..." 01358 "GD...A...C.7B48." 01359 ".G5FD.3...9...BE" 01360 "...C....6.E1G..9" 01361 "28...7E1..B.6..4" 01362 "1.B.5.C.3..8..AF" 01363 ".....ED.16...345" 01364 "9C21....7..A.8E." 01365 "..EA9..3F.8..7.." 01366 "6..5827A..4D.F.C" 01367 , 01368 01369 // http://janko.at/Raetsel/Sudoku/364.a.htm 01370 // 47 01371 "1.....6C.4G.9BA." 01372 ".G6..F.9A.D1...2" 01373 "...D7G.3F...41.." 01374 ".3A.2..1.759.E.G" 01375 "B8..D.F.C.2.A..." 01376 "C....1..DBFA2..5" 01377 "..FG.E.....58C9." 01378 ".25A3.C.G..E...1" 01379 "3...4..B.G.DE78." 01380 ".C78A.....3.12.." 01381 "5..1FC37..E....9" 01382 "...4.2.8.F.B..CA" 01383 "A.4.6B7.5..F.9D." 01384 "..8C...DB.975..." 01385 "9...85.E3.A..46." 01386 ".5D7.A9.E2.....8" 01387 , 01388 01389 // http://janko.at/Raetsel/Sudoku/365.a.htm 01390 // 48 01391 "..D.2...5A1....F" 01392 "E21F..9..6.D...G" 01393 "7A.9G1..2E.4D..8" 01394 ".B64.3FA...8.E.2" 01395 "...3...F...G2A.." 01396 ".F7...5.8D4.B.3." 01397 "4....C.....F8.D1" 01398 ".G....B3A2.....6" 01399 "3.....4CF8....6." 01400 "94.B1.....D....E" 01401 ".C.A.E8D.B...15." 01402 "..G8B...1...C..." 01403 "B.A.8...6F2.3DE." 01404 "2..16.E5..A39.84" 01405 "6...9.3..5..1C2B" 01406 "8....D12...9.6.." 01407 , 01408 01409 // http://janko.at/Raetsel/Sudoku/366.a.htm 01410 // 49 01411 "3....2A.4F.6..G1" 01412 "ADF4..3..5....E." 01413 "..5G..1E....FAB." 01414 "..E.GF75..B..93." 01415 "B...17...A629..." 01416 "...EFG..7.516..C" 01417 "63..D...G...E42F" 01418 "2....8639...1G.." 01419 "..B8...76G2....E" 01420 "5C32...4...E..1G" 01421 "G..62E.9..D4B..." 01422 "...D5CG...A3...7" 01423 ".G7..5..84F9.B.." 01424 ".F6B....5E..21.." 01425 ".5....B..6..7EF9" 01426 "E4..A.9F.BC....5" 01427 , 01428 01429 // http://janko.at/Raetsel/Sudoku/367.a.htm 01430 // 50 01431 "B........45DC.6A" 01432 "4.F...639.CA.E.." 01433 ".9A...CD26.8F1B." 01434 "6.C3.7.8.F..9..." 01435 "D68.E..B...5...." 01436 "73...8A5..9.2..." 01437 "A.G1..9..26..D8." 01438 ".C9.......81A6E." 01439 ".574FA.......G1." 01440 ".AD..37..G..4F.E" 01441 "...9.G..452...CD" 01442 "....B...F..9.725" 01443 "...B..G.C.F.12.9" 01444 ".16AC.5FG3...8D." 01445 "..2.36.759...C.F" 01446 "F8.C194........6" 01447 , 01448 01449 // http://janko.at/Raetsel/Sudoku/368.a.htm 01450 // 51 01451 "C..B61..G...F.AE" 01452 "4E8F...A.....DG." 01453 ".D..F3.E1.5A..6." 01454 "5.....GBE9FC..82" 01455 "..5EB.D8...1.F.6" 01456 "..AD.72...6..3.8" 01457 "...3..E.9FB85..." 01458 "6.B4..1....2CAE." 01459 ".3E9C....G..D1.7" 01460 "...CEG3D.7..A..." 01461 "A.F..B...CD.EG.." 01462 "D.7.1...B2.348.." 01463 "FG..8EB17A.....3" 01464 ".4..D6.G3.CE..5." 01465 ".62.....D...74CA" 01466 "3B.A...4..9F8..G" 01467 , 01468 01469 // http://janko.at/Raetsel/Sudoku/369.a.htm 01470 // 52 01471 "...E.6DB...2.8.." 01472 "....5G.3.9F8C1.." 01473 "981....FG....7.." 01474 ".3.F8....65.2..9" 01475 "3G....4A5D..7.F." 01476 ".A.D...2......64" 01477 ".2.4C.F..A.G...3" 01478 "..F.D.....6C.21E" 01479 "1F9.B2.....E.D.." 01480 "4...E.3..B.DF.2." 01481 "5E......9...3.C." 01482 ".D.3..8142....5A" 01483 "2..5.D6....F1.A." 01484 "..4....86....EDG" 01485 "..3CGFB.E.DA...." 01486 "..G.3...279.6..." 01487 , 01488 01489 // http://janko.at/Raetsel/Sudoku/370.a.htm 01490 // 53 01491 "3....1G..5.7.A4." 01492 "FE7C.3.9.......G" 01493 ".8.....5D9G.C..3" 01494 "5G.A6....38.FD7." 01495 "...5G.94.8.27C.." 01496 ".98.E.5C.G......" 01497 "4....7.25.CB.6.A" 01498 "2A.F.......6.5G." 01499 ".F3.5.......4.DB" 01500 "C.B.98.AF.7....6" 01501 "......6.2D.C.9E." 01502 "..6G4.B.81.9A..." 01503 ".D53.C8....E6.97" 01504 "A..2.D467.....5." 01505 "8.......4.9.32B1" 01506 ".4F.2.3..61....C" 01507 , 01508 01509 // http://janko.at/Raetsel/Sudoku/501.a.htm 01510 // 54 01511 "..E3.7.1.5.6.B.." 01512 "....G85B92.FE..." 01513 "C...4.36A......2" 01514 ".4.BA......G7..C" 01515 "48.2E...5G.9ADB." 01516 ".....B...C4...9E" 01517 "9A..F42.E1...5C." 01518 ".5C.7.9G8....413" 01519 "BE8....26A.C.G3." 01520 ".FD...7E.931..56" 01521 "AC...G6...2....." 01522 ".1369.85...BD.A7" 01523 "E..A6......5C.7." 01524 "3......A7F.E...5" 01525 "...51.G7CDA2...." 01526 "..G.C.B.3.1.9A.." 01527 , 01528 01529 // http://janko.at/Raetsel/Sudoku/502.a.htm 01530 // 55 01531 "G..B..12....73.C" 01532 "..8DB.7CG9A....." 01533 "6.3...D...4E.8B." 01534 "4...38G.21....AD" 01535 "..F.........E.6." 01536 ".E6..75DFG3.B..." 01537 ".7.G.F916EB.4583" 01538 ".B.3.E2..89...F1" 01539 "74...3E..62.5.1." 01540 "9852.CB7DFE.3.G." 01541 "...A.56F431..C9." 01542 ".F.6.........E.." 01543 "C1....F4.B5G...E" 01544 ".D4.EG...2...9.8" 01545 ".....D8974.1CA.." 01546 "B.A7....ED..F..4" 01547 , 01548 01549 // http://janko.at/Raetsel/Sudoku/503.a.htm 01550 // 56 01551 "7B..9C.3..6.A.2E" 01552 "4.2...67A..53..D" 01553 ".....ADE.CB.4.5." 01554 "AD8....B7.F....." 01555 ".C...1.A.9.....8" 01556 "F.E8...C.4.D.6.2" 01557 "..D.59.......1A." 01558 ".1.2......7FBDC3" 01559 "BF6EC4......2.7." 01560 ".53.......C2.E.." 01561 "D.G.2.A.5...F3.C" 01562 "2.....1.B.3...8." 01563 ".....F.43....CD7" 01564 ".8.G.E7.C25....." 01565 "C..DG..1F7...2.A" 01566 "E7.A.6..9.18..B5" 01567 , 01568 01569 // http://janko.at/Raetsel/Sudoku/504.a.htm 01570 // 57 01571 ".21..BD...EF6G.." 01572 "..6.5.F....D.8.E" 01573 "G4.....EB.7.1.D3" 01574 "C.D..37G..61...." 01575 "AB.D8..9.1.E..F." 01576 "6.F4..G..D..8..B" 01577 "....BD.1F.8.7.C9" 01578 "..3...6..G.BED.." 01579 "..B91.C..E...A.." 01580 "47.2.6.A3.1G...." 01581 "8..3..E..B..F1.G" 01582 ".1..7.3.D..C9.25" 01583 "....GF..28B..4.A" 01584 "5A.8.4.B1.....GF" 01585 "D.2.C....F.6.7.." 01586 "..41DA...7G..C9." 01587 , 01588 01589 // http://janko.at/Raetsel/Sudoku/505.a.htm 01590 // 58 01591 ".B...7..4D..E13." 01592 "D......6G.E7...F" 01593 "8.6F....B....7.." 01594 "7...91D..F8C.B.." 01595 ".F.G8.1.3..27..." 01596 ".1.6.4329.7.F..D" 01597 "3..7..5..GBD8..." 01598 "48D.CE....A...9." 01599 ".3...G....C4.9EB" 01600 "...148C..3..A..2" 01601 "9..4.6.7FA5.C.G." 01602 "...EF..5.1.B6.D." 01603 "..5.ABG..7F9...6" 01604 "..3....F....18.E" 01605 "G...E5.32......9" 01606 ".6FB..89..3...C." 01607 , 01608 01609 // http://janko.at/Raetsel/Sudoku/506.a.htm 01610 // 59 01611 "...FDAE..6.1.3B." 01612 "1..C...9.D34.6.." 01613 "8A3.4.....2E7C.." 01614 "..DG.3......8.5E" 01615 "3F2.C.....8B.5.9" 01616 ".DE.8..B2C..A..4" 01617 "C8...1.........6" 01618 ".....D.31.5...E." 01619 ".G...E.84.D....." 01620 "A.........1...43" 01621 "D..E..17C..2.FG." 01622 "2.5.AF.....9.D7B" 01623 "73.2......6.B4.." 01624 "..483B.....D.A61" 01625 "..A.14F.B...5..C" 01626 ".1C.6.D..24A9..." 01627 , 01628 01629 // http://janko.at/Raetsel/Sudoku/507.a.htm 01630 // 60 01631 "4.8CB9G...D..FA2" 01632 "G..18..A96...E.." 01633 "F9....ED..8....B" 01634 "...D73...2F.G.81" 01635 ".......2....C.F9" 01636 "3.D7.E6...9.4..A" 01637 ".C.4..D9.GA..3.7" 01638 ".2.......7.3.65." 01639 ".3B.5.2.......D." 01640 "6.4..G8.FC..B.2." 01641 "E..G.B...D2.18.F" 01642 "CD.2....3......." 01643 "D1.B.8F...C9E..." 01644 "2....D..1B....G5" 01645 "..5...17D..G9..C" 01646 "7E9..C...468FD.3" 01647 , 01648 01649 // http://janko.at/Raetsel/Sudoku/508.a.htm 01650 // 61 01651 "D.B.8.4..5G..2.9" 01652 ".C..6.3...D1.7B." 01653 "GE4.B..52A..FD.C" 01654 "..7.2..E.F9....." 01655 ".2..4....3.D9GEF" 01656 "43.7..A..8......" 01657 "5.ABGD.F..1...37" 01658 "..E......7..6B.." 01659 "..2E..G......3.." 01660 "C5...B..D.F971.8" 01661 "......5..2..C.GE" 01662 "348GD.C....7..5." 01663 ".....91.8..F.6.." 01664 "1.G2..F65..E.89B" 01665 ".8C.54...1.G..F." 01666 "F.5..87..9.A.C.1" 01667 , 01668 01669 // http://janko.at/Raetsel/Sudoku/509.a.htm 01670 // 62 // problems 01671 "..EF96...8.5B.C." 01672 "D...FE....1.2A.." 01673 ".86..2..C...57.1" 01674 "C21...BD9..E...3" 01675 "5..1.C...6....DA" 01676 ".G.....7.E.1.5BC" 01677 "B...D1..8...7..." 01678 "..9D..A27.3.E..." 01679 "...3.A.E5B..6F.." 01680 "...5...C..83...B" 01681 "FDB.2.9.6.....5." 01682 "61....5...E.G..9" 01683 "4...8..3B7...EA2" 01684 "E.26...A..G..CF." 01685 "..58.D....4F...G" 01686 ".B.7C.2...5AD9.." 01687 , 01688 01689 // http://janko.at/Raetsel/Sudoku/510.a.htm 01690 // 63 01691 "..2..DA6.38.14.." 01692 "...5.F..2......." 01693 "6.8.2.G.....7A.B" 01694 "A.F.....65.G..D." 01695 "...6.8E.52...B.." 01696 "7....2.F.G39..8E" 01697 "8..3679..4.C.1.G" 01698 ".B.EG..18.A....7" 01699 "1....A.8C..FG.3." 01700 "E.A.1.3..D42B..5" 01701 "97..CG6.1.B....4" 01702 "..3...2D.E6.A..." 01703 ".C..B.74.....5.A" 01704 "B.68.....C.7.D.F" 01705 ".......A..1.2..." 01706 "..4A.C8.E6G..7.." 01707 , 01708 01709 // http://janko.at/Raetsel/Sudoku/511.a.htm 01710 // 64 01711 "A..95.B.G...8.FD" 01712 "G.D...6FB...A5.." 01713 ".B...1D83.A9G.7." 01714 "F68....G5..1...C" 01715 "..28DA9..5FC...G" 01716 "..G.87.2.A4D.6.." 01717 "....3F.....E.CD9" 01718 "9C5D......G.FA8." 01719 ".71B.6......5842" 01720 "D5F.B.....26...." 01721 "..9.127.F.85.D.." 01722 "2...E35..CB719.." 01723 "6...F..BE....734" 01724 ".F.ECD.3479...2." 01725 "..AG...9C1...F.8" 01726 "39.5...1.D.FB..A" 01727 , 01728 01729 // http://janko.at/Raetsel/Sudoku/512.a.htm 01730 // 65 01731 "....G5D.C1...B2." 01732 "6...E.BC.G..D8.." 01733 "D13C..7..4..5G.." 01734 ".72B48..5.6.C9.." 01735 "....B9E....F4.12" 01736 "...A..FD7B.C8..3" 01737 "E6F..1....G3.DB9" 01738 "B..4.2.89.1...G." 01739 ".5...7.ED.C.G..8" 01740 "C9D.14....E..A35" 01741 "8..2D.591A..6..." 01742 "7G.36....259...." 01743 "..6D.E.5..B4A27." 01744 "..95..2..8..B3D4" 01745 "..7G..4.6E.5...F" 01746 ".B8...97.C32...." 01747 , 01748 01749 // http://janko.at/Raetsel/Sudoku/513.a.htm 01750 // 66 01751 "D...9A..6.F4.3.C" 01752 "....B6..5A.E9D.." 01753 "6E5......D..7F.." 01754 ".3G9..FDC...4..." 01755 "16..AF4..C.7..58" 01756 "G....1..A.B8..F9" 01757 ".7C.3..8...F6..." 01758 "A8.F.G.C43..2..." 01759 "...7..9E3.D.8.4F" 01760 "...8G...9..5.6C." 01761 "59..F3.4..C....G" 01762 "4F..6.D..B7A..2E" 01763 "...D...BE9..G86." 01764 "..2G..3......BE5" 01765 "..E48.6A..2C...." 01766 "3.8.E5.F..AD...4" 01767 , 01768 01769 // http://janko.at/Raetsel/Sudoku/514.a.htm 01770 // 67 01771 "...B562E.1G....." 01772 ".D27A...4...56B." 01773 ".G6..B.C..2..E7." 01774 ".1.C..7.DB..3.42" 01775 "....37.2E..G..64" 01776 "D.3..5..C.A8.G.1" 01777 "C..A...F9...D..3" 01778 ".2.FDG8..3.4.5.E" 01779 "2.8.F.4..CEBG.5." 01780 "E..D...G5...C..B" 01781 "1.5.2C.D..9..F.8" 01782 "FC..E..5G.81...." 01783 "A3.5..G8.9..6.E." 01784 ".F4..A..2.1..39." 01785 ".E16...3...C42G." 01786 ".....E1.763AF..." 01787 , 01788 01789 // http://janko.at/Raetsel/Sudoku/515.a.htm 01790 // 68 01791 "A.5.FB.C...7..3." 01792 "G38....D.C.EB5.." 01793 "..F...3.9G8..D7." 01794 "...E.2.4.A.59.FG" 01795 "8..A..6.3F7D5..." 01796 "B..4....5...DEA." 01797 "61..BD75..E....." 01798 ".5C.1E.A.8....62" 01799 "C8....E.7.62.GD." 01800 ".....A..D95F..84" 01801 ".D41...6....2..7" 01802 "...928D1.E..3..C" 01803 "57.3E.A.8.9.C..." 01804 ".21..C58.4...F.." 01805 "..6C9.1.2....AEB" 01806 ".A..D...G.1C.4.5" 01807 , 01808 01809 // http://janko.at/Raetsel/Sudoku/516.a.htm 01810 // 69 01811 "...E9.5..6.G...F" 01812 ".6.4.3.G...7.1.B" 01813 ".37A.E..49.5C..." 01814 "9....C76.32E.548" 01815 ".E...4..DG9.2..." 01816 ".4...562C...G8.." 01817 ".G93..1B5F.2.C.7" 01818 "C1.639.A.......5" 01819 "D.......2.496.8G" 01820 "6.3.F.9EG5..B2C." 01821 "..AB...86EC...3." 01822 "...9.2C1..B...D." 01823 "7A1.462.3B5....D" 01824 "...D5.89..G.1BA." 01825 "E.5.G...9.6.F.2." 01826 "4...B.E..D.87..." 01827 , 01828 01829 // http://janko.at/Raetsel/Sudoku/517.a.htm 01830 // 70 01831 ".FE6.A.8......1." 01832 "145..7.E..F...68" 01833 "...C.4..EG82..5F" 01834 "....5FD.7B1..C.4" 01835 "..4.82A.C..1B..." 01836 ".8C7..5....AD24G" 01837 "..1F..9.G83BA..." 01838 "..A9F.E6D.....71" 01839 "F9.....53C.718.." 01840 "...321CD.6..74.." 01841 "A1726....4..GFC." 01842 "...49..F.1A8.E.." 01843 "D.F..62B.593...." 01844 "4B..D83A..2.5..." 01845 "87...5..B.4..936" 01846 ".6......8.7.CBD." 01847 , 01848 01849 // http://janko.at/Raetsel/Sudoku/518.a.htm 01850 // 71 01851 "...84......D.1F7" 01852 ".6.C..A.4G.....9" 01853 "..945.G.8.F..3A." 01854 "...7CFD2.3...E.G" 01855 "..6B..58..G....." 01856 "8.7..G.C9.4A1..E" 01857 "C..EA3.9...5.GD." 01858 ".F...2.....B3.8A" 01859 "AB.6F.....C...9." 01860 ".7E.B...5.16G..3" 01861 "1..G79.3A.D..C.5" 01862 ".....1..7E..AB.." 01863 "3.4...8.E792B..." 01864 ".E8..D.B.A.359.." 01865 "5.....1A.D..E.3." 01866 "69D.2......C7..." 01867 , 01868 01869 // http://janko.at/Raetsel/Sudoku/519.a.htm 01870 // 72// problems 01871 "CD.E9.8......6.." 01872 ".62..3...E..85.7" 01873 ".G...6...AF5...D" 01874 "....D54.39.8...E" 01875 "6FB..ED4...G.1.." 01876 "4.A.5..2D......G" 01877 ".C.1...GF53A2..6" 01878 ".2.3.A.1....F..." 01879 "...2....4.B.9.6." 01880 "3..6G8E95...4.2." 01881 "G......D9..3.F.8" 01882 "..4.2...68A..GC3" 01883 "A...1.3E.D9C...." 01884 "E...49C...5...1." 01885 "2.9D..A...8..3F." 01886 "..8......2.7A.E5" 01887 , 01888 01889 // http://janko.at/Raetsel/Sudoku/520.a.htm 01890 // 73 01891 "D..6..1.2C3....8" 01892 "..1..386..5..9.." 01893 ".8C2......DGBF1." 01894 "..5.G......1.A.D" 01895 "..A876..4..C5..." 01896 "64F...AD.2.5..C." 01897 "E....1B9.6A...24" 01898 "B...4....8G...7." 01899 ".7...BD....6...9" 01900 "FG...C9.1D4....A" 01901 ".5..E.6.G7...1DC" 01902 "...BF..G..2A37.." 01903 "5.8.6......D.3.." 01904 ".E2D5A......7CF." 01905 "..7..9..A51..4.." 01906 "9....DC1.4..E..5" 01907 , 01908 01909 // http://janko.at/Raetsel/Sudoku/586.a.htm 01910 // 74 01911 "8D...6E...A2...." 01912 "E9.6....4..D.537" 01913 "..539C.2..7.A4.." 01914 "..B2G..5......6D" 01915 ".F....G9CB84...." 01916 "21.D.F5..7.EB.G6" 01917 "983..47.65...A.2" 01918 ".7.C6....A..3954" 01919 "C698..1....54.7." 01920 "F.A...46.82..D9G" 01921 "42.5B.C..3G.6.8F" 01922 "....5E28F9....A." 01923 "7B......G..1C3.." 01924 "..F4.5..B.3AG6.." 01925 "35E.C..A....7.49" 01926 "....D1...FC...25" 01927 , 01928 01929 // http://janko.at/Raetsel/Sudoku/587.a.htm 01930 // 75 01931 "6D.5F.B83..7...." 01932 ".F.761...854.A.." 01933 "39.8.D..B..EF.6." 01934 "..E.3.956F...CB1" 01935 "F65......GBA...2" 01936 "...3.6C7D9...8.B" 01937 "..DE..82F.7...5." 01938 "B.7.DF....3.619." 01939 ".A9B.5....81.F.6" 01940 ".3...E.BG5..12.." 01941 "C.G...DF7B9.A..." 01942 "5...1C6......B84" 01943 "7E6...F91A.B.3.." 01944 ".5.9A..D..6.B.2E" 01945 "..A.BG5...F97.1." 01946 "....2..65E.8C.AF" 01947 , 01948 01949 // http://janko.at/Raetsel/Sudoku/588.a.htm 01950 // 76 01951 "F.....8.43..BGD6" 01952 "6E..G29....C3.7." 01953 "2.1..D7.5.E..C.." 01954 "89.4...C7.612..." 01955 ".1.F..DAEB5...8." 01956 "..6AF34...D..E1." 01957 "E...B..5..8G.493" 01958 "7.892....4.3D..." 01959 "...1E.A....F63.C" 01960 "D6E.89..G..5...1" 01961 ".G3..F...91E78.." 01962 ".F...1GB36..E.A." 01963 "...87G.6C...4.FA" 01964 "..7..8.1.FB..6.2" 01965 ".D.GA....134..CE" 01966 "C2A6..F3.5.....D" 01967 , 01968 01969 // http://janko.at/Raetsel/Sudoku/589.a.htm 01970 // 77 01971 "...439.27..5..G." 01972 "5C67...A93...2D." 01973 ".3B...1D...2.78." 01974 "...2.G7.8EA.3.5F" 01975 "E.C.A23....D...7" 01976 "...D.B..G7F81..6" 01977 ".G.1.68.2A.ECD.." 01978 "F8.6.4G......AE5" 01979 "643......DB.F.2E" 01980 "..586.4C.F2.D.B." 01981 "B..F8A2G..3.7..." 01982 "7...E....894.C.A" 01983 "D7.3.1B4.CE.9..." 01984 ".F4.9...B2...6C." 01985 ".BG...67D...4E13" 01986 ".6..F..31.4AB..." 01987 , 01988 01989 // http://janko.at/Raetsel/Sudoku/590.a.htm 01990 // 78 01991 ".1B.....2.59F.6G" 01992 "G.2341A...BF...." 01993 "C.E8....3..D.24." 01994 "F....9E..1...B38" 01995 "..1.F45.6.3.2..9" 01996 "3..E.8C.5D..1..." 01997 "....DB..A8...FE3" 01998 ".4.93.1.E..G.8D." 01999 ".GF.C..7.5.69.8." 02000 "BDC...F1..A8...." 02001 "...5..94.21.G..C" 02002 "E..1.5.8.FC3.D.." 02003 "1B4...8..92....6" 02004 ".A8.9..C....45.B" 02005 "....12...6853A.F" 02006 "5C.27A.B.....91." 02007 , 02008 02009 // http://janko.at/Raetsel/Sudoku/591.a.htm 02010 // 79 02011 "A57...8E4......9" 02012 ".4C85.6....9.E3B" 02013 ".E1...3G657..AC8" 02014 "...F.1.9.8EA5.7." 02015 ".8.5.7...4F...2." 02016 "..9316....BG8..." 02017 "..E2A..4.....D97" 02018 "F.4....856..G1.3" 02019 "6.84..ECB....F.5" 02020 "5FA.....C..637.." 02021 "...7F4....1528.." 02022 ".2...35...8.C.1." 02023 ".9.13E2.8.4.A..." 02024 "BD2..G4FAC...98." 02025 "8G5.C....D.EF3B." 02026 "4......57B...2G6" 02027 , 02028 02029 // http://janko.at/Raetsel/Sudoku/592.a.htm 02030 // 80 02031 "..8.A.F.B97.1.6." 02032 "1B79...6.....8E." 02033 "..E3..928...D.5." 02034 "26..8.B....17..." 02035 "91..6A2..B3..D.." 02036 ".F..37.52.GD.4.." 02037 "3.679...5.EF...A" 02038 "4.B..FC..16...G5" 02039 "73...8A..5D..F.1" 02040 "5...FC.3...98G.E" 02041 "..F.D5.13.A8..B." 02042 "..A..B6..2FG..7D" 02043 "...6B....E.2..1C" 02044 ".4.F...A1D..GE.." 02045 ".A2.....G...4638" 02046 ".7.G.28F.6.3.A.." 02047 , 02048 02049 // http://janko.at/Raetsel/Sudoku/593.a.htm 02050 // 81 02051 ".2ED.4...C...F.." 02052 ".8.FE.6.1.....A4" 02053 "A..7.8F.29.B...C" 02054 "....3GCB...5.87D" 02055 "..45DA..B7F3C.6." 02056 "....G...4..CA2.5" 02057 "2.7.F..CG...34B." 02058 ".ED.B54381..G..." 02059 "...4..825GBE.3F." 02060 ".B5G...63..F.C.1" 02061 "1.F27..E...4...." 02062 ".D.84FG5..167B.." 02063 "3C1.2...DB8G...." 02064 "D...6.59.F3.8..2" 02065 "4G.....F.A.71.C." 02066 "..8...B...9.ED3." 02067 , 02068 02069 // http://janko.at/Raetsel/Sudoku/594.a.htm 02070 // 82 02071 "5....E...7B..CF2" 02072 "AF.467....3...D." 02073 "D.E.C.3....8.7.." 02074 "....8..DA6.E..5." 02075 "..3B....4.A.EF1." 02076 "69..B.D.3.....C7" 02077 "1..G...49.C..6.." 02078 "...D12G5FE..B..." 02079 "...7..93285AF..." 02080 "..8..4.76...2..G" 02081 "96.....F.3.B..84" 02082 ".AB3.G.6....95.." 02083 ".1..F.69E..2...." 02084 "..9.G....F.3.2.E" 02085 ".E...D....95G.BF" 02086 "2G7..C5...4....3" 02087 , 02088 02089 // http://janko.at/Raetsel/Sudoku/595.a.htm 02090 // 83 02091 ".3.B8..C61...2.." 02092 ".E.2...F..4.1A67" 02093 "71D...A...C..B.." 02094 ".6...92D.B.3..45" 02095 "...8A...C.F4...3" 02096 ".F9.75E4..B.6..." 02097 "5..1...8..6.4F.." 02098 "4...C....EA.B.2G" 02099 "2D.7.E5....6...1" 02100 "..BA.D..9...G..8" 02101 "...E.1..G2DF.59." 02102 "6...4C.B...73..." 02103 "A2..B.C.46E...7." 02104 "..1..2...9...8AD" 02105 "DC75.A..3...E.B." 02106 "..8...GEA..C2.5." 02107 , 02108 02109 // http://janko.at/Raetsel/Sudoku/596.a.htm 02110 // 84 02111 "B62...9...1...G7" 02112 "C.....7.6..A.1.9" 02113 ".1....A8..7.2..3" 02114 "..A831.CG2..E..." 02115 ".8..92.A..GD4..." 02116 "G.C.D8..F.529..." 02117 "...4.........D6A" 02118 ".5.B.C.17..3G8.." 02119 "..E12..9D.B.6.8." 02120 "9C7.........5..." 02121 "...A54.7..2C.F.G" 02122 "...FCD..4.A5..9." 02123 "...9..1E2.F83C.." 02124 "1..7.9..A3....D." 02125 "2.3.8..B.5.....6" 02126 "EB...3...7...G12" 02127 , 02128 02129 // http://janko.at/Raetsel/Sudoku/597.a.htm 02130 // 85 02131 "..6..1..4..F3.A." 02132 "7E..6G.3....FC.." 02133 "BC3..FD.6.9.G..2" 02134 ".....4E.CG3.B..." 02135 "1.E..C.....2.A.." 02136 "...AE6...4F..9.3" 02137 ".8.2..3F.C.1...." 02138 "34..8...B57..EC." 02139 ".B9..3CD...8..E5" 02140 "....9.F.GA..4.1." 02141 "A.4..E2...6BC..." 02142 "..8.A.....E..7.B" 02143 "...C.2A6.EB....." 02144 "E..8.9.5.3C..62G" 02145 "..B9....2.GD..5C" 02146 ".3.5C..E..1..4.." 02147 , 02148 02149 // http://janko.at/Raetsel/Sudoku/598.a.htm 02150 // 86 02151 ".FA..5...B7..E.6" 02152 "18....4B...C..G." 02153 "..G.7..CF....8.5" 02154 ".B9CG8.........." 02155 ".D..A.G..85....E" 02156 "69..3...1...C5.." 02157 "7.4B....G.A.2..F" 02158 "..8.5B6D..27...." 02159 "....8G..EC61.D.." 02160 "3..6.C.7....91.8" 02161 "..DF...5...9..73" 02162 "8....6B..2.5..E." 02163 "..........14EFD." 02164 "9.6....AD..F.7.." 02165 ".E..6...29....1C" 02166 "G.2..EF...C..4B." 02167 , 02168 02169 // http://janko.at/Raetsel/Sudoku/599.a.htm 02170 // 87 02171 ".3..6GF..C8....." 02172 "G..9.B.8...5.A74" 02173 "7..8.2..B..D...." 02174 ".EA.....3.6..9B." 02175 "..F.2....3AG...." 02176 "E7...........39G" 02177 ".9.A..31E6..FC.." 02178 "4.3..D.9C.B....E" 02179 "6....8.4A.2..G.C" 02180 "..G3..CFD9..4.A." 02181 "A85...........FB" 02182 "....5A7....6.2.." 02183 ".24..7.D.....16." 02184 "....1..3..C.2..8" 02185 "1A7.C...6.3.E..9" 02186 ".....6E..1F2..3." 02187 , 02188 02189 // http://janko.at/Raetsel/Sudoku/600.a.htm 02190 // 88 02191 "....47.....9B.1." 02192 "..5..9F2.6....43" 02193 "B..3.....E24..9." 02194 "..9.....A57..2.." 02195 ".DA4E..7...C.F.." 02196 ".1.6..4.E....8.B" 02197 "....81BF..4.5..7" 02198 "...F9A....D..E.4" 02199 "5.2..3....A71..." 02200 "6..C.B..G9FE...." 02201 "7.8....9.D..C.3." 02202 "..G.6...1..3E45." 02203 "..F..E8D.....A.." 02204 ".2..741.....3..8" 02205 "D6....5.92B..1.." 02206 ".A.EB.....C6....", 02207 // 89 02208 //".N..JG..O7591...8I....L.." 02209 "BNDAJG62O7591KHF8IP34CLME" 02210 "FG.M.B8...P.E...CJ..H...." 02211 "...........G.4.H.D.O.NJA2" 02212 ".....J.EN4.L6MA.B.2......" 02213 "HE..2..DC.....F4KMA.B.9O8" 02214 "M....62...47C19......E5.." 02215 ".I2.8M.JGL...ADN..K..3.F7" 02216 "..H3.5..89....I.J.....NL." 02217 "1B..9.FAP.6.N....537.H..O" 02218 "......1..N...O...LC.68.PG" 02219 "KOA.FNBH.....7.C.....M..6" 02220 "45.ECP.I..N.F.J1...MK.79." 02221 "I.L..8.O..9.P...A...2.1J." 02222 "..621.D.M.....B8LG..P..CH" 02223 ".HP.N7E.L1....3..B..O.G45" 02224 "....BIO....5.C.P...FN48E." 02225 "...FL.....2.DH..17..59O.." 02226 "..I.MF..2G.N...A6O.HC.PB." 02227 "72.1..L...IM.96E.45G....." 02228 "..9...7M..A.O...I...L...." 02229 ".C.JA.........1.....E.48." 02230 "O.BI.......PHL.6..1....5C" 02231 "G6M...N4FI8...K..H.E....." 02232 ".L..4.917....BE.G8F.M.I.." 02233 "8F......5.O3..4...9.....K", 02234 // 90 02235 //".N..JG..O7591...8I....L.." 02236 ".ND.JG6.O7591..F8IP.4.LM." 02237 "FG.M.B8...P.E...CJ..H...." 02238 "...........G.4.H.D.O.NJA2" 02239 ".....J.EN4.L6MA.B.2......" 02240 "HE..2..DC.....F4KMA.B.9O8" 02241 "M....62...47C19......E5.." 02242 ".I2.8M.JGL...ADN..K..3.F7" 02243 "..H3.5..89....I.J.....NL." 02244 "1B..9.FAP.6.N....537.H..O" 02245 "......1..N...O...LC.68.PG" 02246 "KOA.FNBH.....7.C.....M..6" 02247 "45.ECP.I..N.F.J1...MK.79." 02248 "I.L..8.O..9.P...A...2.1J." 02249 "..621.D.M.....B8LG..P..CH" 02250 ".HP.N7E.L1....3..B..O.G45" 02251 "....BIO....5.C.P...FN48E." 02252 "...FL.....2.DH..17..59O.." 02253 "..I.MF..2G.N...A6O.HC.PB." 02254 "72.1..L...IM.96E.45G....." 02255 "..9...7M..A.O...I...L...." 02256 ".C.JA.........1.....E.48." 02257 "O.BI.......PHL.6..1....5C" 02258 "G6M...N4FI8...K..H.E....." 02259 ".L..4.917....BE.G8F.M.I.." 02260 "8F......5.O3..4...9.....K" 02261 }; 02262 02264 const unsigned int n_examples = sizeof(examples)/sizeof(char*); 02265 02267 int example_size(const char *s) { 02268 int l = std::strlen(s); 02269 int res = static_cast<int>(std::sqrt(std::sqrt(static_cast<float>(l)))); 02270 assert(res*res*res*res == l); 02271 return res; 02272 } 02273 02275 int sudokuField(const char *s, int n, int i, int j) { 02276 assert(example_size(s) == std::sqrt(static_cast<float>(n))); 02277 assert(i >= 0 && i < n); 02278 assert(j >= 0 && j < n); 02279 char c = s[j*n + i]; 02280 if (!std::isalnum(c)) 02281 return 0; 02282 if (std::isdigit(c)) 02283 return c - '0'; 02284 if (std::islower(c)) 02285 c = static_cast<char>(std::toupper(c)); 02286 // std::alpha(c) == true && std::isupper(c) 02287 int res = (c - 'A') + 10; 02288 if (res > n) return 0; 02289 else return res; 02290 } 02292 } 02293 02294 // STATISTICS: example-any