1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| #
!/usr/bin/wish
frame .f1
frame .f2
pack .f1 -side top
pack .f2 -side top
for {set i 0} {$i<3} {incr i} {
for {set j 0} {$j<3} {incr j} {
for {set k 0} {$k<3} {incr k} {
for {set l 0} {$l<3} {incr l} {
set e($i,$j,$k,$l) " "
entry .f1.$i$j$k$l -textvariable e($i,$j,$k,$l) -width 1
}
}
}
}
for {set i 0} {$i<3} {incr i} {
for {set k 0} {$k<3} {incr k} {
for {set j 0} {$j<3} {incr j} {
for {set l 0} {$l<3} {incr l} {
set r [expr $i*3+$k]
set c [expr $j*3+$l]
grid .f1.$i$j$k$l -row $r -column $c
}
}
}
}
button .f2.quit -text "Quitter" -command {exit 0}
button .f2.search -text "Résoudre" -command {resolution_Sudoku e}
pack .f2.search -side left
pack .f2.quit -side left
proc resolution_Sudoku {re} {
upvar $re e
set liste {1 2 3 4 5 6 7 8 9}
set trouve [position_vide e]
if {[lindex $trouve 0]!=-10} {
set i [lindex $trouve 0]
set j [lindex $trouve 1]
set k [lindex $trouve 2]
set l [lindex $trouve 3]
unset trouve
foreach chiffre $liste {
if {[carre e $chiffre $i $j] && [ligne e $chiffre $i $k] && [colonne e $chiffre $j $l]} {
set e($i,$j,$k,$l) $chiffre
update
resolution_Sudoku e
set e($i,$j,$k,$l) " "
}
}
} else {
puts "C'est parti"
update
for {set i 0} {$i<3} {incr i} {
for {set k 0} {$k<3} {incr k} {
for {set j 0} {$j<3} {incr j} {
for {set l 0} {$l<3} {incr l} {
puts -nonewline "$e($i,$j,$k,$l)"
}
}
puts ""
}
}
}
}
proc position_vide {re} {
upvar $re e
set trouve {-10}
for {set i 0} {$i<3} {incr i} {
for {set j 0} {$j<3} {incr j} {
for {set k 0} {$k<3} {incr k} {
for {set l 0} {$l<3} {incr l} {
if {$e($i,$j,$k,$l)==" "} {
set trouve [list $i $j $k $l]
}
}
}
}
}
return $trouve
}
proc carre {re chiffre i j} {
upvar $re e
set sortie 1
for {set k 0} {$k<3} {incr k} {
for {set l 0} {$l<3} {incr l} {
if {$chiffre == $e($i,$j,$k,$l)} {
set sortie 0
}
}
}
return $sortie
}
proc ligne {re chiffre i k} {
upvar $re e
set sortie 1
for {set j 0} {$j<3} {incr j} {
for {set l 0} {$l<3} {incr l} {
if {$chiffre == $e($i,$j,$k,$l)} {
set sortie 0
}
}
}
return $sortie
}
proc colonne {re chiffre j l} {
upvar $re e
set sortie 1
for {set i 0} {$i<3} {incr i} {
for {set k 0} {$k<3} {incr k} {
if {$chiffre == $e($i,$j,$k,$l)} {
set sortie 0
}
}
}
return $sortie
} |
Partager