Advertisement
Guest User

Untitled

a guest
Mar 11th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 1.64 KB | None | 0 0
  1. proc sudoku2 {grid} {
  2.     #check rows
  3.     foreach row $grid {
  4.         if {[checkRow [removeDummy $row]] == 0} {
  5.             return false
  6.         }
  7.     }
  8.    
  9.     #check Column
  10.     foreach row [getRows $grid] {
  11.         if {[checkRow [removeDummy $row]] == 0} {
  12.             return false
  13.         }
  14.     }
  15.    
  16.     #Check square
  17.     foreach row [getSquares $grid] {
  18.         if {[checkRow [removeDummy $row]] == 0} {
  19.             return false
  20.         }
  21.     }
  22.    
  23.     return true
  24. }
  25.  
  26. proc checkRow {row} {
  27.     if {[llength $row] == 0} {
  28.         return 1
  29.     }
  30.     return [string equal [lsort -unique $row] [lsort $row]]
  31. }
  32.  
  33. proc removeDummy {values} {
  34.     return [lsearch -inline -all -not $values  "." ]
  35. }
  36.  
  37. proc getSquares {a} {
  38.     array set tempArray {}
  39.    
  40.     for {set i 0} {$i<9} {set i [expr $i +3]} {
  41.         for {set j 0} {$j<9} {set j [expr $j +3]} {
  42.             set square ""
  43.             for {set k 0} {$k<3} {incr k} {
  44.                 set row [lindex $a [expr $k+$i]]
  45.                 for {set l 0} {$l<3} {incr l} {
  46.                     lappend square [lindex [split $row " "] [expr $l + $j]]
  47.                 }
  48.             }
  49.             set tempArray([expr ($i/3)+($j)]) $square
  50.         }
  51.     }
  52.     for {set i 0} {$i < 9} {incr i} {
  53.         lappend retVal $tempArray($i)
  54.     }
  55.     return $retVal
  56. }
  57.  
  58. proc getRows {a} {
  59.     array set tempArray {}
  60.     set retVal ""
  61.     foreach row $a {
  62.         for {set i 0} {$i < 9} {incr i} {
  63.             lappend tempArray($i) [list [lindex $row $i]]
  64.         }
  65.     }
  66.     for {set i 0} {$i < 9} {incr i} {
  67.             lappend retVal $tempArray($i)
  68.     }
  69.     return $retVal
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement