Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- proc sudoku2 {grid} {
- #check rows
- foreach row $grid {
- if {[checkRow [removeDummy $row]] == 0} {
- return false
- }
- }
- #check Column
- foreach row [getRows $grid] {
- if {[checkRow [removeDummy $row]] == 0} {
- return false
- }
- }
- #Check square
- foreach row [getSquares $grid] {
- if {[checkRow [removeDummy $row]] == 0} {
- return false
- }
- }
- return true
- }
- proc checkRow {row} {
- if {[llength $row] == 0} {
- return 1
- }
- return [string equal [lsort -unique $row] [lsort $row]]
- }
- proc removeDummy {values} {
- return [lsearch -inline -all -not $values "." ]
- }
- proc getSquares {a} {
- array set tempArray {}
- for {set i 0} {$i<9} {set i [expr $i +3]} {
- for {set j 0} {$j<9} {set j [expr $j +3]} {
- set square ""
- for {set k 0} {$k<3} {incr k} {
- set row [lindex $a [expr $k+$i]]
- for {set l 0} {$l<3} {incr l} {
- lappend square [lindex [split $row " "] [expr $l + $j]]
- }
- }
- set tempArray([expr ($i/3)+($j)]) $square
- }
- }
- for {set i 0} {$i < 9} {incr i} {
- lappend retVal $tempArray($i)
- }
- return $retVal
- }
- proc getRows {a} {
- array set tempArray {}
- set retVal ""
- foreach row $a {
- for {set i 0} {$i < 9} {incr i} {
- lappend tempArray($i) [list [lindex $row $i]]
- }
- }
- for {set i 0} {$i < 9} {incr i} {
- lappend retVal $tempArray($i)
- }
- return $retVal
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement