A Perl "one-liner" to solve Sudoko puzzles. This program uses an optimized Brute Force Search to solve the Sudoko in only 88 interations.
[1] https://en.wikipedia.org/wiki/Sudoku_solving_algorithms
$ time ( perl -e '
$t = "root";
$h->{$t} = q[-----526--1-------74-----91-5-79-----8--2--5-----36-1-49-----23-------8--256-----];
simplify($t, 1);
foreach $enum(0..511){
undef @changes;
$bit = 1;
foreach $r(0..8){
foreach $c(0..8){
$combo = $w->{$t}{p}{$c}{$r};
if(2 == length($combo)){
$z_o = ($enum & (1 << ($bit - 1))) ? 1 : 0;
$d = substr($combo, $z_o, 1);
printf qq[- ab set: enum %u: c%ur%u = %s # %u=bit %u=z_o %u=d\n], $enum, 1 + $c, 1 + $r, $combo, $bit, $z_o, $d;
push @changes, ($c, $r, $d); $bit ++;
}
}
}
if(0){ printf qq[- changes: @changes\n]; }
simplify(ab_set($t, @changes), 1);
}
sub simplify{
($v, $depth) = @_;
do{ find_cell_digits($v); }while(can_be_simplified($v) > 0);
}
sub find_cell_digits{
($v) = @_;
delete $w->{$v};
printf qq[- variant: %s\n], $v;
foreach $r(0..8){
push @{$w->{$v}{r}}, substr($h->{$v}, 9 * $r, 9);
foreach $c(0..8){
$d = substr($h->{$v}, ($r * 9) + $c, 1); $w->{$v}{c}[$c] .= $d;
$s = (int($r / 3) * 3) + int($c / 3) ; $w->{$v}{s}[$s] .= $d;
}
}
printf qq[- rows: @{$w->{$v}{r}}\n- cols: @{$w->{$v}{c}}\n- sqrs: @{$w->{$v}{s}}\n];
}
sub can_be_simplified{
($v) = @_;
$good = 0; $b = 0; $z = 1;
foreach $r(0..8){
printf qq[- row%u: %s: ], 1 + $r, substr($h->{$v}, 9 * $r, 9);
foreach $c(0..8){
$d = substr($h->{$v}, ($r * 9) + $c, 1);
if($d =~ m~[1-9]~){ $good ++; printf qq[%-9s ], "[$d]"; next; }
$s = (int($r / 3) * 3) + int($c / 3);
foreach $d(1..9){
next if($w->{$v}{c}[$c] =~ m~$d~);
next if($w->{$v}{r}[$r] =~ m~$d~);
next if($w->{$v}{s}[$s] =~ m~$d~);
$w->{$v}{p}{$c}{$r} .= qq[$d];
}
$combo = $w->{$v}{p}{$c}{$r};
if(1 == length($combo)){ $b = 1; substr($h->{$v}, ($r * 9) + $c, 1) = $combo; }
if(0 == length($combo)){ $combo = q[ZILCH]; $z = -1; }
if(1 == length($combo)){ $combo .= q[ !!!!!!!]; }
if(2 == length($combo)){ $combo .= q[ <<<<<<]; }
printf qq[%-9s ], $combo;
}
printf qq[\n];
}
printf qq[- return: $b * $z = %d\n\n], $b * $z;
if(81 == $good){ printf qq[- winner: after %u iterations!\n], 1 + $enum; exit; }
return $b * $z;
}
sub ab_set{
($v, @changes) = @_;
$v2 = $v;
$tmp = $h->{$v};
while($#changes >= 0){
$c = shift @changes;
$r = shift @changes;
$d = shift @changes;
$v2 .= sprintf qq[ c%ur%u=%u], 1 + $c, 1 + $r, $d;
substr($tmp, ($r * 9) + $c, 1) = $d;
if(0){ printf qq[$c=c $r=r $d=d %s %s\n], $tmp, $v2; }
}
$h->{$v2} = $tmp;
return $v2;
}' | tee sudoku.log | tail -1 ) # see https://www.websudoku.com/?level=4&set_id=1527376286
- winner: after 88 iterations!
real 0m0.426s
- 1st: Optimization step: Resolve any cells which can only be a single digit.
- 2nd: Optimization step: Determine all cells which only have two possible digits.
- 3rd: Brute Force Search through all the combinations of two possible digit cells.
- Max 9 cells with dual digit possibilites are assumed.
- The max 512 combinations to test are determined via binary math operations.
- Although Perl is much slower than e.g. C++, this optimized Brute Force Search algorithm in Perl is only a little slower than a non-optimized Brute Force Search algorithm in C++, due to the two orders of magnitude less combinations needing to be checked.
- Each iteration shows its working for easy debugging:
$ cat sudoku.log
- variant: root
- rows: -----526- -1------- 74-----91 -5-79---- -8--2--5- ----36-1- 49-----23 -------8- -256-----
- cols: --7---4-- -1458-9-2 --------5 ---7----6 ---923--- 5----6--- 2-------- 6-9-5128- --1---3--
- sqrs: ----1-74- --5------ 26-----91 -5--8---- 79--2--36 ----5--1- 49-----25 ------6-- -23-8----
- row1: -----526-: 389 3 !!!!!!! 389 13489 1478 [5] [2] [6] 478
- row2: -1-------: 235689 [1] 23689 23489 4678 234789 34578 347 4578
- row3: 74-----91: [7] [4] 2368 238 68 <<<<<< 238 358 [9] [1]
- row4: -5-79----: 1236 [5] 12346 [7] [9] 148 3468 34 <<<<<< 2468
- row5: -8--2--5-: 1369 [8] 134679 14 <<<<<< [2] 14 <<<<<< 34679 [5] 4679
- row6: ----36-1-: 29 <<<<<< 7 !!!!!!! 2479 458 [3] [6] 4789 [1] 24789
- row7: 49-----23: [4] [9] 1678 158 1578 178 1567 [2] [3]
- row8: -------8-: 136 367 1367 123459 1457 123479 145679 [8] 45679
- row9: -256-----: 138 [2] [5] [6] 1478 134789 1479 47 <<<<<< 479
- return: 1 * 1 = 1
- variant: root
- rows: -3---526- -1------- 74-----91 -5-79---- -8--2--5- -7--36-1- 49-----23 -------8- -256-----
- cols: --7---4-- 3145879-2 --------5 ---7----6 ---923--- 5----6--- 2-------- 6-9-5128- --1---3--
- sqrs: -3--1-74- --5------ 26-----91 -5--8--7- 79--2--36 ----5--1- 49-----25 ------6-- -23-8----
- row1: -3---526-: 89 <<<<<< [3] 89 <<<<<< 1489 1478 [5] [2] [6] 478
- row2: -1-------: 25689 [1] 2689 23489 4678 234789 34578 347 4578
- row3: 74-----91: [7] [4] 268 238 68 <<<<<< 238 358 [9] [1]
- row4: -5-79----: 1236 [5] 12346 [7] [9] 148 3468 34 <<<<<< 2468
- row5: -8--2--5-: 1369 [8] 13469 14 <<<<<< [2] 14 <<<<<< 34679 [5] 4679
- row6: -7--36-1-: 29 <<<<<< [7] 249 458 [3] [6] 489 [1] 2489
- row7: 49-----23: [4] [9] 1678 158 1578 178 1567 [2] [3]
- row8: -------8-: 136 6 !!!!!!! 1367 123459 1457 123479 145679 [8] 45679
- row9: -256-----: 138 [2] [5] [6] 1478 134789 1479 47 <<<<<< 479
- return: 1 * 1 = 1
- variant: root
- rows: -3---526- -1------- 74-----91 -5-79---- -8--2--5- -7--36-1- 49-----23 -6-----8- -256-----
- cols: --7---4-- 314587962 --------5 ---7----6 ---923--- 5----6--- 2-------- 6-9-5128- --1---3--
- sqrs: -3--1-74- --5------ 26-----91 -5--8--7- 79--2--36 ----5--1- 49--6--25 ------6-- -23-8----
- row1: -3---526-: 89 <<<<<< [3] 89 <<<<<< 1489 1478 [5] [2] [6] 478
- row2: -1-------: 25689 [1] 2689 23489 4678 234789 34578 347 4578
- row3: 74-----91: [7] [4] 268 238 68 <<<<<< 238 358 [9] [1]
- row4: -5-79----: 1236 [5] 12346 [7] [9] 148 3468 34 <<<<<< 2468
- row5: -8--2--5-: 1369 [8] 13469 14 <<<<<< [2] 14 <<<<<< 34679 [5] 4679
- row6: -7--36-1-: 29 <<<<<< [7] 249 458 [3] [6] 489 [1] 2489
- row7: 49-----23: [4] [9] 178 158 1578 178 1567 [2] [3]
- row8: -6-----8-: 13 <<<<<< [6] 137 123459 1457 123479 14579 [8] 4579
- row9: -256-----: 138 [2] [5] [6] 1478 134789 1479 47 <<<<<< 479
- return: 0 * 1 = 0
- ab set: enum 0: c1r1 = 89 # 1=bit 0=z_o 8=d
- ab set: enum 0: c3r1 = 89 # 2=bit 0=z_o 8=d
- ab set: enum 0: c5r3 = 68 # 3=bit 0=z_o 6=d
- ab set: enum 0: c8r4 = 34 # 4=bit 0=z_o 3=d
- ab set: enum 0: c4r5 = 14 # 5=bit 0=z_o 1=d
- ab set: enum 0: c6r5 = 14 # 6=bit 0=z_o 1=d
- ab set: enum 0: c1r6 = 29 # 7=bit 0=z_o 2=d
- ab set: enum 0: c1r8 = 13 # 8=bit 0=z_o 1=d
- ab set: enum 0: c8r9 = 47 # 9=bit 0=z_o 4=d
- variant: root c1r1=8 c3r1=8 c5r3=6 c8r4=3 c4r5=1 c6r5=1 c1r6=2 c1r8=1 c8r9=4
- rows: 838--526- -1------- 74--6--91 -5-79--3- -8-121-5- 27--36-1- 49-----23 16-----8- -256---4-
- cols: 8-7--241- 314587962 8-------5 ---71---6 --6923--- 5---16--- 2-------- 6-9351284 --1---3--
- sqrs: 838-1-74- --5----6- 26-----91 -5--8-27- 79-121-36 -3--5--1- 49-16--25 ------6-- -23-8--4-
- row1: 838--526-: [8] [3] [8] 49 <<<<<< 147 [5] [2] [6] 47 <<<<<<
- row2: -1-------: 569 [1] 269 23489 478 234789 34578 7 !!!!!!! 4578
- row3: 74--6--91: [7] [4] 2 !!!!!!! 238 [6] 238 358 [9] [1]
- row4: -5-79--3-: 6 !!!!!!! [5] 146 [7] [9] 48 <<<<<< 468 [3] 2468
- row5: -8-121-5-: 369 [8] 3469 [1] [2] [1] 4679 [5] 4679
- row6: 27--36-1-: [2] [7] 49 <<<<<< 458 [3] [6] 489 [1] 489
- row7: 49-----23: [4] [9] 7 !!!!!!! 58 <<<<<< 1578 78 <<<<<< 1567 [2] [3]
- row8: 16-----8-: [1] [6] 37 <<<<<< 23459 457 23479 579 [8] 579
- row9: -256---4-: 3 !!!!!!! [2] [5] [6] 178 3789 179 [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=8 c3r1=8 c5r3=6 c8r4=3 c4r5=1 c6r5=1 c1r6=2 c1r8=1 c8r9=4
- rows: 838--526- -1-----7- 742-6--91 65-79--3- -8-121-5- 27--36-1- 497----23 16-----8- 3256---4-
- cols: 8-76-2413 314587962 8-2---7-5 ---71---6 --6923--- 5---16--- 2-------- 679351284 --1---3--
- sqrs: 838-1-742 --5----6- 26--7--91 65--8-27- 79-121-36 -3--5--1- 49716-325 ------6-- -23-8--4-
- row1: 838--526-: [8] [3] [8] 49 <<<<<< 147 [5] [2] [6] 4 !!!!!!!
- row2: -1-----7-: 59 <<<<<< [1] 69 <<<<<< 23489 48 <<<<<< 23489 3458 [7] 458
- row3: 742-6--91: [7] [4] [2] 38 <<<<<< [6] 38 <<<<<< 358 [9] [1]
- row4: 65-79--3-: [6] [5] 14 <<<<<< [7] [9] 48 <<<<<< 48 <<<<<< [3] 248
- row5: -8-121-5-: 9 !!!!!!! [8] 349 [1] [2] [1] 4679 [5] 4679
- row6: 27--36-1-: [2] [7] 49 <<<<<< 458 [3] [6] 489 [1] 489
- row7: 497----23: [4] [9] [7] 58 <<<<<< 158 8 !!!!!!! 156 [2] [3]
- row8: 16-----8-: [1] [6] ZILCH 23459 457 23479 579 [8] 579
- row9: 3256---4-: [3] [2] [5] [6] 178 789 179 [4] 79 <<<<<<
- return: 1 * -1 = -1
...
- ab set: enum 87: c1r1 = 89 # 1=bit 1=z_o 9=d
- ab set: enum 87: c3r1 = 89 # 2=bit 1=z_o 9=d
- ab set: enum 87: c5r3 = 68 # 3=bit 1=z_o 8=d
- ab set: enum 87: c8r4 = 34 # 4=bit 0=z_o 3=d
- ab set: enum 87: c4r5 = 14 # 5=bit 1=z_o 4=d
- ab set: enum 87: c6r5 = 14 # 6=bit 0=z_o 1=d
- ab set: enum 87: c1r6 = 29 # 7=bit 1=z_o 9=d
- ab set: enum 87: c1r8 = 13 # 8=bit 0=z_o 1=d
- ab set: enum 87: c8r9 = 47 # 9=bit 0=z_o 4=d
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 939--526- -1------- 74--8--91 -5-79--3- -8-421-5- 97--36-1- 49-----23 16-----8- -256---4-
- cols: 9-7--941- 314587962 9-------5 ---74---6 --8923--- 5---16--- 2-------- 6-9351284 --1---3--
- sqrs: 939-1-74- --5----8- 26-----91 -5--8-97- 79-421-36 -3--5--1- 49-16--25 ------6-- -23-8--4-
- row1: 939--526-: [9] [3] [9] 1 !!!!!!! 147 [5] [2] [6] 478
- row2: -1-------: 2568 [1] 268 239 467 23479 34578 7 !!!!!!! 4578
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-79--3-: 26 <<<<<< [5] 1246 [7] [9] 8 !!!!!!! 468 [3] 2468
- row5: -8-421-5-: 36 <<<<<< [8] 36 <<<<<< [4] [2] [1] 679 [5] 679
- row6: 97--36-1-: [9] [7] 24 <<<<<< 58 <<<<<< [3] [6] 48 <<<<<< [1] 248
- row7: 49-----23: [4] [9] 78 <<<<<< 158 157 78 <<<<<< 1567 [2] [3]
- row8: 16-----8-: [1] [6] 37 <<<<<< 2359 457 23479 579 [8] 579
- row9: -256---4-: 38 <<<<<< [2] [5] [6] 17 <<<<<< 3789 179 [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 9391-526- -1-----7- 74--8--91 -5-798-3- -8-421-5- 97--36-1- 49-----23 16-----8- -256---4-
- cols: 9-7--941- 314587962 9-------5 1--74---6 --8923--- 5--816--- 2-------- 679351284 --1---3--
- sqrs: 939-1-74- 1-5----8- 26--7--91 -5--8-97- 798421-36 -3--5--1- 49-16--25 ------6-- -23-8--4-
- row1: 9391-526-: [9] [3] [9] [1] 47 <<<<<< [5] [2] [6] 48 <<<<<<
- row2: -1-----7-: 2568 [1] 268 239 46 <<<<<< 2349 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-798-3-: 26 <<<<<< [5] 1246 [7] [9] [8] 46 <<<<<< [3] 246
- row5: -8-421-5-: 36 <<<<<< [8] 36 <<<<<< [4] [2] [1] 679 [5] 679
- row6: 97--36-1-: [9] [7] 24 <<<<<< 5 !!!!!!! [3] [6] 48 <<<<<< [1] 248
- row7: 49-----23: [4] [9] 78 <<<<<< 58 <<<<<< 157 7 !!!!!!! 1567 [2] [3]
- row8: 16-----8-: [1] [6] 37 <<<<<< 2359 457 23479 579 [8] 579
- row9: -256---4-: 38 <<<<<< [2] [5] [6] 17 <<<<<< 379 179 [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 9391-526- -1-----7- 74--8--91 -5-798-3- -8-421-5- 97-536-1- 49---7-23 16-----8- -256---4-
- cols: 9-7--941- 314587962 9-------5 1--745--6 --8923--- 5--8167-- 2-------- 679351284 --1---3--
- sqrs: 939-1-74- 1-5----8- 26--7--91 -5--8-97- 798421536 -3--5--1- 49-16--25 --7---6-- -23-8--4-
- row1: 9391-526-: [9] [3] [9] [1] 47 <<<<<< [5] [2] [6] 48 <<<<<<
- row2: -1-----7-: 2568 [1] 268 239 46 <<<<<< 2349 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-798-3-: 26 <<<<<< [5] 1246 [7] [9] [8] 46 <<<<<< [3] 246
- row5: -8-421-5-: 36 <<<<<< [8] 36 <<<<<< [4] [2] [1] 679 [5] 679
- row6: 97-536-1-: [9] [7] 24 <<<<<< [5] [3] [6] 48 <<<<<< [1] 248
- row7: 49---7-23: [4] [9] 8 !!!!!!! 8 !!!!!!! 15 <<<<<< [7] 156 [2] [3]
- row8: 16-----8-: [1] [6] 37 <<<<<< 239 45 <<<<<< 2349 579 [8] 579
- row9: -256---4-: 38 <<<<<< [2] [5] [6] 1 !!!!!!! 39 <<<<<< 179 [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 9391-526- -1-----7- 74--8--91 -5-798-3- -8-421-5- 97-536-1- 4988-7-23 16-----8- -2561--4-
- cols: 9-7--941- 314587962 9-----8-5 1--7458-6 --8923--1 5--8167-- 2-------- 679351284 --1---3--
- sqrs: 939-1-74- 1-5----8- 26--7--91 -5--8-97- 798421536 -3--5--1- 49816--25 8-7---61- -23-8--4-
- row1: 9391-526-: [9] [3] [9] [1] 47 <<<<<< [5] [2] [6] 48 <<<<<<
- row2: -1-----7-: 2568 [1] 26 <<<<<< 239 46 <<<<<< 2349 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-798-3-: 26 <<<<<< [5] 1246 [7] [9] [8] 46 <<<<<< [3] 246
- row5: -8-421-5-: 36 <<<<<< [8] 36 <<<<<< [4] [2] [1] 679 [5] 679
- row6: 97-536-1-: [9] [7] 24 <<<<<< [5] [3] [6] 48 <<<<<< [1] 248
- row7: 4988-7-23: [4] [9] [8] [8] 5 !!!!!!! [7] 156 [2] [3]
- row8: 16-----8-: [1] [6] 37 <<<<<< 239 45 <<<<<< 2349 579 [8] 579
- row9: -2561--4-: 3 !!!!!!! [2] [5] [6] [1] 39 <<<<<< 79 <<<<<< [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 9391-526- -1-----7- 74--8--91 -5-798-3- -8-421-5- 97-536-1- 498857-23 16-----8- 32561--4-
- cols: 9-7--9413 314587962 9-----8-5 1--7458-6 --89235-1 5--8167-- 2-------- 679351284 --1---3--
- sqrs: 939-1-74- 1-5----8- 26--7--91 -5--8-97- 798421536 -3--5--1- 49816-325 857---61- -23-8--4-
- row1: 9391-526-: [9] [3] [9] [1] 47 <<<<<< [5] [2] [6] 48 <<<<<<
- row2: -1-----7-: 2568 [1] 26 <<<<<< 239 46 <<<<<< 2349 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-798-3-: 26 <<<<<< [5] 1246 [7] [9] [8] 46 <<<<<< [3] 246
- row5: -8-421-5-: 6 !!!!!!! [8] 36 <<<<<< [4] [2] [1] 679 [5] 679
- row6: 97-536-1-: [9] [7] 24 <<<<<< [5] [3] [6] 48 <<<<<< [1] 248
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 16-----8-: [1] [6] 7 !!!!!!! 239 4 !!!!!!! 2349 579 [8] 579
- row9: 32561--4-: [3] [2] [5] [6] [1] 9 !!!!!!! 79 <<<<<< [4] 79 <<<<<<
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 9391-526- -1-----7- 74--8--91 -5-798-3- 68-421-5- 97-536-1- 498857-23 167-4--8- 325619-4-
- cols: 9-7-69413 314587962 9-----875 1--7458-6 --8923541 5--8167-9 2-------- 679351284 --1---3--
- sqrs: 939-1-74- 1-5----8- 26--7--91 -5-68-97- 798421536 -3--5--1- 498167325 857-4-619 -23-8--4-
- row1: 9391-526-: [9] [3] [9] [1] 7 !!!!!!! [5] [2] [6] 48 <<<<<<
- row2: -1-----7-: 258 [1] 26 <<<<<< 239 6 !!!!!!! 234 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: -5-798-3-: 2 !!!!!!! [5] 124 [7] [9] [8] 46 <<<<<< [3] 246
- row5: 68-421-5-: [6] [8] 3 !!!!!!! [4] [2] [1] 79 <<<<<< [5] 79 <<<<<<
- row6: 97-536-1-: [9] [7] 24 <<<<<< [5] [3] [6] 48 <<<<<< [1] 248
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4--8-: [1] [6] [7] 23 <<<<<< [4] 23 <<<<<< 59 <<<<<< [8] 59 <<<<<<
- row9: 325619-4-: [3] [2] [5] [6] [1] [9] 7 !!!!!!! [4] 7 !!!!!!!
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 93917526- -1--6--7- 74--8--91 25-798-3- 683421-5- 97-536-1- 498857-23 167-4--8- 325619747
- cols: 9-7269413 314587962 9---3-875 1--7458-6 768923541 5--8167-9 2-------7 679351284 --1---3-7
- sqrs: 939-1-74- 175-6--8- 26--7--91 25-68397- 798421536 -3--5--1- 498167325 857-4-619 -23-8-747
- row1: 93917526-: [9] [3] [9] [1] [7] [5] [2] [6] 48 <<<<<<
- row2: -1--6--7-: 58 <<<<<< [1] 2 !!!!!!! 239 [6] 234 3458 [7] 458
- row3: 74--8--91: [7] [4] 26 <<<<<< 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: 25-798-3-: [2] [5] 14 <<<<<< [7] [9] [8] 46 <<<<<< [3] 46 <<<<<<
- row5: 683421-5-: [6] [8] [3] [4] [2] [1] 9 !!!!!!! [5] 9 !!!!!!!
- row6: 97-536-1-: [9] [7] 4 !!!!!!! [5] [3] [6] 48 <<<<<< [1] 248
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4--8-: [1] [6] [7] 23 <<<<<< [4] 23 <<<<<< 59 <<<<<< [8] 59 <<<<<<
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 93917526- -12-6--7- 74--8--91 25-798-3- 683421959 974536-1- 498857-23 167-4--8- 325619747
- cols: 9-7269413 314587962 92--34875 1--7458-6 768923541 5--8167-9 2---9---7 679351284 --1-9-3-7
- sqrs: 939-1274- 175-6--8- 26--7--91 25-683974 798421536 -3-959-1- 498167325 857-4-619 -23-8-747
- row1: 93917526-: [9] [3] [9] [1] [7] [5] [2] [6] 48 <<<<<<
- row2: -12-6--7-: 58 <<<<<< [1] [2] 39 <<<<<< [6] 34 <<<<<< 3458 [7] 458
- row3: 74--8--91: [7] [4] 6 !!!!!!! 23 <<<<<< [8] 23 <<<<<< 35 <<<<<< [9] [1]
- row4: 25-798-3-: [2] [5] 1 !!!!!!! [7] [9] [8] 46 <<<<<< [3] 46 <<<<<<
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 974536-1-: [9] [7] [4] [5] [3] [6] 8 !!!!!!! [1] 28 <<<<<<
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4--8-: [1] [6] [7] 23 <<<<<< [4] 23 <<<<<< 5 !!!!!!! [8] 5 !!!!!!!
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 93917526- -12-6--7- 746-8--91 251798-3- 683421959 97453681- 498857-23 167-4-585 325619747
- cols: 9-7269413 314587962 926134875 1--7458-6 768923541 5--8167-9 2---98-57 679351284 --1-9-357
- sqrs: 939-12746 175-6--8- 26--7--91 251683974 798421536 -3-95981- 498167325 857-4-619 -23585747
- row1: 93917526-: [9] [3] [9] [1] [7] [5] [2] [6] 48 <<<<<<
- row2: -12-6--7-: 58 <<<<<< [1] [2] 39 <<<<<< [6] 34 <<<<<< 34 <<<<<< [7] 48 <<<<<<
- row3: 746-8--91: [7] [4] [6] 23 <<<<<< [8] 23 <<<<<< 3 !!!!!!! [9] [1]
- row4: 251798-3-: [2] [5] [1] [7] [9] [8] 46 <<<<<< [3] 46 <<<<<<
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 97453681-: [9] [7] [4] [5] [3] [6] [8] [1] 2 !!!!!!!
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4-585: [1] [6] [7] 23 <<<<<< [4] 23 <<<<<< [5] [8] [5]
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 93917526- -12-6--7- 746-8-391 251798-3- 683421959 974536812 498857-23 167-4-585 325619747
- cols: 9-7269413 314587962 926134875 1--7458-6 768923541 5--8167-9 2-3-98-57 679351284 --1-92357
- sqrs: 939-12746 175-6--8- 26--7-391 251683974 798421536 -3-959812 498167325 857-4-619 -23585747
- row1: 93917526-: [9] [3] [9] [1] [7] [5] [2] [6] 48 <<<<<<
- row2: -12-6--7-: 58 <<<<<< [1] [2] 39 <<<<<< [6] 34 <<<<<< 4 !!!!!!! [7] 48 <<<<<<
- row3: 746-8-391: [7] [4] [6] 2 !!!!!!! [8] 2 !!!!!!! [3] [9] [1]
- row4: 251798-3-: [2] [5] [1] [7] [9] [8] 46 <<<<<< [3] 46 <<<<<<
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 974536812: [9] [7] [4] [5] [3] [6] [8] [1] [2]
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4-585: [1] [6] [7] 23 <<<<<< [4] 23 <<<<<< [5] [8] [5]
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 93917526- -12-6-47- 746282391 251798-3- 683421959 974536812 498857-23 167-4-585 325619747
- cols: 9-7269413 314587962 926134875 1-27458-6 768923541 5-28167-9 243-98-57 679351284 --1-92357
- sqrs: 939-12746 175-6-282 26-47-391 251683974 798421536 -3-959812 498167325 857-4-619 -23585747
- row1: 93917526-: [9] [3] [9] [1] [7] [5] [2] [6] 8 !!!!!!!
- row2: -12-6-47-: 58 <<<<<< [1] [2] 39 <<<<<< [6] 3 !!!!!!! [4] [7] 8 !!!!!!!
- row3: 746282391: [7] [4] [6] [2] [8] [2] [3] [9] [1]
- row4: 251798-3-: [2] [5] [1] [7] [9] [8] 6 !!!!!!! [3] 46 <<<<<<
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 974536812: [9] [7] [4] [5] [3] [6] [8] [1] [2]
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 16 <<<<<< [2] [3]
- row8: 167-4-585: [1] [6] [7] 3 !!!!!!! [4] 3 !!!!!!! [5] [8] [5]
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 939175268 -12-63478 746282391 25179863- 683421959 974536812 498857-23 167343585 325619747
- cols: 9-7269413 314587962 926134875 1-2745836 768923541 532816739 243698-57 679351284 881-92357
- sqrs: 939-12746 175-63282 268478391 251683974 798421536 63-959812 498167325 857343619 -23585747
- row1: 939175268: [9] [3] [9] [1] [7] [5] [2] [6] [8]
- row2: -12-63478: 5 !!!!!!! [1] [2] 9 !!!!!!! [6] [3] [4] [7] [8]
- row3: 746282391: [7] [4] [6] [2] [8] [2] [3] [9] [1]
- row4: 25179863-: [2] [5] [1] [7] [9] [8] [6] [3] 4 !!!!!!!
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 974536812: [9] [7] [4] [5] [3] [6] [8] [1] [2]
- row7: 498857-23: [4] [9] [8] [8] [5] [7] 1 !!!!!!! [2] [3]
- row8: 167343585: [1] [6] [7] [3] [4] [3] [5] [8] [5]
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 1 * 1 = 1
- variant: root c1r1=9 c3r1=9 c5r3=8 c8r4=3 c4r5=4 c6r5=1 c1r6=9 c1r8=1 c8r9=4
- rows: 939175268 512963478 746282391 251798634 683421959 974536812 498857123 167343585 325619747
- cols: 957269413 314587962 926134875 192745836 768923541 532816739 243698157 679351284 881492357
- sqrs: 939512746 175963282 268478391 251683974 798421536 634959812 498167325 857343619 123585747
- row1: 939175268: [9] [3] [9] [1] [7] [5] [2] [6] [8]
- row2: 512963478: [5] [1] [2] [9] [6] [3] [4] [7] [8]
- row3: 746282391: [7] [4] [6] [2] [8] [2] [3] [9] [1]
- row4: 251798634: [2] [5] [1] [7] [9] [8] [6] [3] [4]
- row5: 683421959: [6] [8] [3] [4] [2] [1] [9] [5] [9]
- row6: 974536812: [9] [7] [4] [5] [3] [6] [8] [1] [2]
- row7: 498857123: [4] [9] [8] [8] [5] [7] [1] [2] [3]
- row8: 167343585: [1] [6] [7] [3] [4] [3] [5] [8] [5]
- row9: 325619747: [3] [2] [5] [6] [1] [9] [7] [4] [7]
- return: 0 * 1 = 0
- winner: after 88 iterations!