Sudoku: Difference between revisions

13,819 bytes removed ,  3 years ago
m
→‎{{header|Raku}}: 'use v6' obsolete, default to no logging
(→‎{{header|Tailspin}}: clearer code for output)
m (→‎{{header|Raku}}: 'use v6' obsolete, default to no logging)
Line 8,903:
{{trans|Perl}}
 
<lang perl6>usemy v6;@A = <
my @A = <
5 3 0 0 2 4 7 0 0
0 0 2 0 0 0 8 0 0
Line 8,961 ⟶ 8,960:
This is an alternative solution that uses a more ellaborate set of choices instead of brute-forcing it.
 
<lang perl6>#!/usr/bin/env raku
use v6;
#
# In this code, a sudoku puzzle is represented as a two-dimentional
# array. The cells that are not yet solved are represented by yet
Line 9,166 ⟶ 9,163:
 
sub trace(Int $level, Str $message) {
# say '.' x $level, $message; # un-comment for verbose logging
}
 
Line 9,187 ⟶ 9,184:
 
{{out}}
<pre> 9 5 4 1 3 7 6 8 2
<pre>
Trying 8 on 9,1 [8, 9]
.Trying 6 on 9,2 [3, 6]
..Trying 7 on 9,9 [3, 7]
...Trying 1 on 9,8 [1, 3]
....Trying 4 on 8,1 [4, 5]
.....Trying 3 on 7,2 [3, 5]
......Trying 3 on 8,7 [2, 3]
.......Trying 6 on 8,9 [2, 6]
.......Trying 2 on 8,9 [2, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Trying 2 on 8,7 [2, 3]
.......Trying 3 on 8,9 [3, 6]
.......Trying 6 on 8,9 [3, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Backtrack, path unsolvable... (on 8 7)
.....Trying 5 on 7,2 [3, 5]
......Trying 5 on 8,7 [2, 5]
.......Trying 6 on 8,9 [2, 6]
.......Trying 2 on 8,9 [2, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Trying 2 on 8,7 [2, 5]
.......Trying 5 on 8,9 [5, 6]
.......Trying 6 on 8,9 [5, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Backtrack, path unsolvable... (on 8 7)
.....Backtrack, path unsolvable... (on 7 2)
....Trying 5 on 8,1 [4, 5]
.....Trying 3 on 8,3 [3, 4]
......Trying 6 on 8,9 [2, 6]
.......Trying 3 on 7,9 [3, 5]
........Trying 5 on 1,9 [2, 5]
.........Trying 3 on 3,8 [3, 7]
..........Trying 4 on 2,1 [1, 4]
..........Trying 1 on 2,1 [1, 4]
..........Backtrack, path unsolvable... (on 2 1)
.........Trying 7 on 3,8 [3, 7]
..........Trying 3 on 3,7 [1, 3]
..........Trying 1 on 3,7 [1, 3]
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Trying 2 on 1,9 [2, 5]
.........Trying 3 on 3,8 [3, 7]
..........Trying 7 on 2,7 [1, 7]
...........Trying 9 on 3,1 [2, 9]
...........Trying 2 on 3,1 [2, 9]
...........Backtrack, path unsolvable... (on 3 1)
..........Trying 1 on 2,7 [1, 7]
..........Backtrack, path unsolvable... (on 2 7)
.........Trying 7 on 3,8 [3, 7]
..........Trying 3 on 3,7 [1, 3]
..........Trying 1 on 3,7 [1, 3]
...........Trying 9 on 3,1 [2, 9]
...........Trying 2 on 3,1 [2, 9]
...........Backtrack, path unsolvable... (on 3 1)
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Backtrack, path unsolvable... (on 1 9)
.......Trying 5 on 7,9 [3, 5]
........Trying 8 on 1,9 [2, 8]
.........Trying 2 on 3,7 [1, 2]
.........Trying 1 on 3,7 [1, 2]
.........Backtrack, path unsolvable... (on 3 7)
........Trying 2 on 1,9 [2, 8]
.........Trying 7 on 3,8 [5, 7]
..........Trying 5 on 3,7 [1, 5]
...........Trying 2 on 2,1 [2, 4]
...........Trying 4 on 2,1 [2, 4]
...........Backtrack, path unsolvable... (on 2 1)
..........Trying 1 on 3,7 [1, 5]
...........Trying 9 on 3,1 [2, 9]
...........Trying 2 on 3,1 [2, 9]
...........Backtrack, path unsolvable... (on 3 1)
..........Backtrack, path unsolvable... (on 3 7)
.........Trying 5 on 3,8 [5, 7]
..........Trying 7 on 3,7 [1, 7]
...........Trying 2 on 2,1 [2, 4]
...........Trying 4 on 2,1 [2, 4]
...........Backtrack, path unsolvable... (on 2 1)
..........Trying 1 on 3,7 [1, 7]
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Backtrack, path unsolvable... (on 1 9)
.......Backtrack, path unsolvable... (on 7 9)
......Trying 2 on 8,9 [2, 6]
.......Trying 3 on 7,9 [3, 5]
........Trying 8 on 1,9 [5, 8]
.........Trying 3 on 3,8 [3, 7]
..........Trying 4 on 1,3 [1, 4]
...........Trying 9 on 1,1 [1, 9]
............Trying 1 on 3,1 [1, 2]
............Trying 2 on 3,1 [1, 2]
............Backtrack, path unsolvable... (on 3 1)
...........Trying 1 on 1,1 [1, 9]
...........Backtrack, path unsolvable... (on 1 1)
..........Trying 1 on 1,3 [1, 4]
...........Trying 9 on 1,1 [4, 9]
...........Trying 4 on 1,1 [4, 9]
...........Backtrack, path unsolvable... (on 1 1)
..........Backtrack, path unsolvable... (on 1 3)
.........Trying 7 on 3,8 [3, 7]
..........Trying 3 on 3,7 [1, 3]
..........Trying 1 on 3,7 [1, 3]
...........Trying 9 on 3,1 [2, 9]
...........Trying 2 on 3,1 [2, 9]
...........Backtrack, path unsolvable... (on 3 1)
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Trying 5 on 1,9 [5, 8]
........Backtrack, path unsolvable... (on 1 9)
.......Trying 5 on 7,9 [3, 5]
........Trying 5 on 1,8 [2, 5]
.........Trying 7 on 3,8 [2, 7]
..........Trying 4 on 1,3 [1, 4]
..........Trying 1 on 1,3 [1, 4]
..........Backtrack, path unsolvable... (on 1 3)
.........Trying 2 on 3,8 [2, 7]
..........Trying 9 on 3,1 [1, 9]
..........Trying 1 on 3,1 [1, 9]
..........Backtrack, path unsolvable... (on 3 1)
.........Backtrack, path unsolvable... (on 3 8)
........Trying 2 on 1,8 [2, 5]
.........Trying 7 on 3,8 [5, 7]
..........Trying 4 on 1,3 [1, 4]
...........Trying 9 on 1,1 [1, 9]
............Trying 1 on 3,1 [1, 2]
............Trying 2 on 3,1 [1, 2]
............Backtrack, path unsolvable... (on 3 1)
...........Trying 1 on 1,1 [1, 9]
...........Backtrack, path unsolvable... (on 1 1)
..........Trying 1 on 1,3 [1, 4]
...........Trying 9 on 1,1 [4, 9]
...........Trying 4 on 1,1 [4, 9]
...........Backtrack, path unsolvable... (on 1 1)
..........Backtrack, path unsolvable... (on 1 3)
.........Trying 5 on 3,8 [5, 7]
..........Trying 7 on 3,7 [1, 7]
...........Trying 2 on 2,1 [2, 4]
...........Trying 4 on 2,1 [2, 4]
...........Backtrack, path unsolvable... (on 2 1)
..........Trying 1 on 3,7 [1, 7]
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Backtrack, path unsolvable... (on 1 8)
.......Backtrack, path unsolvable... (on 7 9)
......Backtrack, path unsolvable... (on 8 9)
.....Trying 4 on 8,3 [3, 4]
......Trying 3 on 8,7 [2, 3]
.......Trying 6 on 8,9 [2, 6]
.......Trying 2 on 8,9 [2, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Trying 2 on 8,7 [2, 3]
.......Trying 3 on 8,9 [3, 6]
.......Trying 6 on 8,9 [3, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Backtrack, path unsolvable... (on 8 7)
.....Backtrack, path unsolvable... (on 8 3)
....Backtrack, path unsolvable... (on 8 1)
...Trying 3 on 9,8 [1, 3]
....Trying 4 on 8,1 [4, 5]
.....Trying 3 on 7,2 [3, 5]
.....Trying 5 on 7,2 [3, 5]
......Trying 6 on 7,9 [2, 6]
......Trying 2 on 7,9 [2, 6]
......Backtrack, path unsolvable... (on 7 9)
.....Backtrack, path unsolvable... (on 7 2)
....Trying 5 on 8,1 [4, 5]
.....Trying 6 on 8,9 [2, 6]
......Trying 8 on 1,9 [2, 8]
.......Trying 1 on 3,7 [1, 2]
.......Trying 2 on 3,7 [1, 2]
.......Backtrack, path unsolvable... (on 3 7)
......Trying 2 on 1,9 [2, 8]
.......Trying 7 on 3,8 [5, 7]
........Trying 5 on 3,7 [1, 5]
.........Trying 9 on 3,1 [1, 9]
.........Trying 1 on 3,1 [1, 9]
.........Backtrack, path unsolvable... (on 3 1)
........Trying 1 on 3,7 [1, 5]
.........Trying 9 on 3,1 [2, 9]
.........Trying 2 on 3,1 [2, 9]
.........Backtrack, path unsolvable... (on 3 1)
........Backtrack, path unsolvable... (on 3 7)
.......Trying 5 on 3,8 [5, 7]
........Trying 7 on 3,7 [1, 7]
.........Trying 9 on 3,1 [1, 9]
.........Trying 1 on 3,1 [1, 9]
.........Backtrack, path unsolvable... (on 3 1)
........Trying 1 on 3,7 [1, 7]
........Backtrack, path unsolvable... (on 3 7)
.......Backtrack, path unsolvable... (on 3 8)
......Backtrack, path unsolvable... (on 1 9)
.....Trying 2 on 8,9 [2, 6]
......Trying 5 on 1,8 [2, 5]
.......Trying 7 on 3,8 [2, 7]
........Trying 4 on 2,1 [1, 4]
........Trying 1 on 2,1 [1, 4]
........Backtrack, path unsolvable... (on 2 1)
.......Trying 2 on 3,8 [2, 7]
........Trying 9 on 3,1 [1, 9]
........Trying 1 on 3,1 [1, 9]
........Backtrack, path unsolvable... (on 3 1)
.......Backtrack, path unsolvable... (on 3 8)
......Trying 2 on 1,8 [2, 5]
.......Trying 7 on 3,8 [5, 7]
........Trying 1 on 3,7 [1, 5]
.........Trying 9 on 3,1 [2, 9]
.........Trying 2 on 3,1 [2, 9]
.........Backtrack, path unsolvable... (on 3 1)
........Trying 5 on 3,7 [1, 5]
.........Trying 9 on 3,1 [1, 9]
.........Trying 1 on 3,1 [1, 9]
.........Backtrack, path unsolvable... (on 3 1)
........Backtrack, path unsolvable... (on 3 7)
.......Trying 5 on 3,8 [5, 7]
........Trying 9 on 3,1 [1, 9]
........Trying 1 on 3,1 [1, 9]
........Backtrack, path unsolvable... (on 3 1)
.......Backtrack, path unsolvable... (on 3 8)
......Backtrack, path unsolvable... (on 1 8)
.....Backtrack, path unsolvable... (on 8 9)
....Backtrack, path unsolvable... (on 8 1)
...Backtrack, path unsolvable... (on 9 8)
..Trying 3 on 9,9 [3, 7]
...Trying 4 on 8,1 [4, 5]
....Trying 3 on 7,2 [3, 5]
....Trying 5 on 7,2 [3, 5]
.....Trying 6 on 7,9 [2, 6]
.....Trying 2 on 7,9 [2, 6]
.....Backtrack, path unsolvable... (on 7 9)
....Backtrack, path unsolvable... (on 7 2)
...Trying 5 on 8,1 [4, 5]
....Trying 6 on 8,9 [2, 6]
.....Trying 8 on 1,9 [2, 8]
......Trying 7 on 2,9 [2, 7]
.......Trying 1 on 3,7 [1, 2]
.......Trying 2 on 3,7 [1, 2]
.......Backtrack, path unsolvable... (on 3 7)
......Trying 2 on 2,9 [2, 7]
.......Trying 4 on 2,1 [1, 4]
.......Trying 1 on 2,1 [1, 4]
.......Backtrack, path unsolvable... (on 2 1)
......Backtrack, path unsolvable... (on 2 9)
.....Trying 2 on 1,9 [2, 8]
......Trying 3 on 3,8 [3, 5]
.......Trying 5 on 2,7 [1, 5]
........Trying 9 on 3,1 [2, 9]
........Trying 2 on 3,1 [2, 9]
........Backtrack, path unsolvable... (on 3 1)
.......Trying 1 on 2,7 [1, 5]
.......Backtrack, path unsolvable... (on 2 7)
......Trying 5 on 3,8 [3, 5]
.......Trying 3 on 3,7 [1, 3]
.......Trying 1 on 3,7 [1, 3]
.......Backtrack, path unsolvable... (on 3 7)
......Backtrack, path unsolvable... (on 3 8)
.....Backtrack, path unsolvable... (on 1 9)
....Trying 2 on 8,9 [2, 6]
.....Trying 5 on 1,8 [2, 5]
......Trying 3 on 3,8 [2, 3]
.......Trying 4 on 2,1 [1, 4]
.......Trying 1 on 2,1 [1, 4]
.......Backtrack, path unsolvable... (on 2 1)
......Trying 2 on 3,8 [2, 3]
.......Trying 9 on 3,1 [1, 9]
.......Trying 1 on 3,1 [1, 9]
.......Backtrack, path unsolvable... (on 3 1)
......Backtrack, path unsolvable... (on 3 8)
.....Trying 2 on 1,8 [2, 5]
......Trying 3 on 3,8 [3, 5]
.......Trying 4 on 1,3 [1, 4]
.......Trying 1 on 1,3 [1, 4]
.......Backtrack, path unsolvable... (on 1 3)
......Trying 5 on 3,8 [3, 5]
.......Trying 9 on 3,1 [1, 9]
.......Trying 1 on 3,1 [1, 9]
.......Backtrack, path unsolvable... (on 3 1)
......Backtrack, path unsolvable... (on 3 8)
.....Backtrack, path unsolvable... (on 1 8)
....Backtrack, path unsolvable... (on 8 9)
...Backtrack, path unsolvable... (on 8 1)
..Backtrack, path unsolvable... (on 9 9)
.Trying 3 on 9,2 [3, 6]
..Trying 7 on 9,9 [6, 7]
...Trying 1 on 9,8 [1, 6]
....Trying 4 on 8,1 [4, 5]
.....Trying 6 on 7,2 [5, 6]
......Trying 3 on 8,7 [2, 3]
.......Trying 6 on 8,9 [2, 6]
.......Trying 2 on 8,9 [2, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Trying 2 on 8,7 [2, 3]
.......Trying 6 on 8,9 [3, 6]
.......Trying 3 on 8,9 [3, 6]
.......Backtrack, path unsolvable... (on 8 9)
......Backtrack, path unsolvable... (on 8 7)
.....Trying 5 on 7,2 [5, 6]
......Trying 4 on 1,2 [2, 4]
.......Trying 1 on 1,3 [1, 5]
........Trying 2 on 2,1 [2, 5]
........Trying 5 on 2,1 [2, 5]
........Backtrack, path unsolvable... (on 2 1)
.......Trying 5 on 1,3 [1, 5]
........Trying 1 on 2,1 [1, 2]
.........Trying 9 on 1,1 [2, 9]
..........Trying 8 on 1,9 [2, 8]
..........Trying 2 on 1,9 [2, 8]
..........Backtrack, path unsolvable... (on 1 9)
.........Trying 2 on 1,1 [2, 9]
.........Backtrack, path unsolvable... (on 1 1)
........Trying 2 on 2,1 [1, 2]
.........Trying 9 on 1,1 [1, 9]
..........Trying 8 on 1,9 [2, 8]
...........Trying 2 on 8,9 [2, 3]
...........Trying 3 on 8,9 [2, 3]
...........Backtrack, path unsolvable... (on 8 9)
..........Trying 2 on 1,9 [2, 8]
..........Backtrack, path unsolvable... (on 1 9)
.........Trying 1 on 1,1 [1, 9]
..........Trying 8 on 1,9 [2, 8]
...........Trying 2 on 8,9 [2, 3]
...........Trying 3 on 8,9 [2, 3]
...........Backtrack, path unsolvable... (on 8 9)
..........Trying 2 on 1,9 [2, 8]
..........Backtrack, path unsolvable... (on 1 9)
.........Backtrack, path unsolvable... (on 1 1)
........Backtrack, path unsolvable... (on 2 1)
.......Backtrack, path unsolvable... (on 1 3)
......Trying 2 on 1,2 [2, 4]
.......Trying 1 on 2,1 [1, 5]
........Trying 9 on 1,1 [5, 9]
.........Trying 8 on 1,9 [5, 8]
.........Trying 5 on 1,9 [5, 8]
.........Backtrack, path unsolvable... (on 1 9)
........Trying 5 on 1,1 [5, 9]
........Backtrack, path unsolvable... (on 1 1)
.......Trying 5 on 2,1 [1, 5]
........Trying 9 on 1,1 [1, 9]
.........Trying 8 on 1,9 [5, 8]
..........Trying 6 on 7,9 [3, 6]
..........Trying 3 on 7,9 [3, 6]
..........Backtrack, path unsolvable... (on 7 9)
.........Trying 5 on 1,9 [5, 8]
.........Backtrack, path unsolvable... (on 1 9)
........Trying 1 on 1,1 [1, 9]
.........Trying 8 on 1,9 [5, 8]
..........Trying 5 on 8,9 [3, 5]
..........Trying 3 on 8,9 [3, 5]
..........Backtrack, path unsolvable... (on 8 9)
.........Trying 5 on 1,9 [5, 8]
.........Backtrack, path unsolvable... (on 1 9)
........Backtrack, path unsolvable... (on 1 1)
.......Backtrack, path unsolvable... (on 2 1)
......Backtrack, path unsolvable... (on 1 2)
.....Backtrack, path unsolvable... (on 7 2)
....Trying 5 on 8,1 [4, 5]
.....Trying 6 on 8,3 [4, 6]
......Trying 3 on 8,9 [2, 3]
.......Trying 6 on 7,9 [5, 6]
........Trying 5 on 1,9 [2, 5]
.........Trying 3 on 3,8 [3, 7]
..........Trying 4 on 2,1 [1, 4]
..........Trying 1 on 2,1 [1, 4]
..........Backtrack, path unsolvable... (on 2 1)
.........Trying 7 on 3,8 [3, 7]
..........Trying 3 on 3,7 [1, 3]
..........Trying 1 on 3,7 [1, 3]
..........Backtrack, path unsolvable... (on 3 7)
.........Backtrack, path unsolvable... (on 3 8)
........Trying 2 on 1,9 [2, 5]
.........Trying 3 on 3,8 [3, 7]
..........Trying 7 on 2,7 [1, 7]
..........Trying 1 on 2,7 [1, 7]
...........Trying 4 on 2,1 [2, 4]
...........Trying 2 on 2,1 [2, 4]
...........Solved... (2 on 2,1)
..........Solved... (1 on 2,7)
.........Solved... (3 on 3,8)
........Solved... (2 on 1,9)
.......Solved... (6 on 7,9)
......Solved... (3 on 8,9)
.....Solved... (6 on 8,3)
....Solved... (5 on 8,1)
...Solved... (1 on 9,8)
..Solved... (7 on 9,9)
.Solved... (3 on 9,2)
Solved... (8 on 9,1)
---------------------------------------------
9 5 4 1 3 7 6 8 2
2 7 3 6 8 4 1 9 5
1 6 8 2 9 5 7 3 4
2,392

edits