Sudoku: Difference between revisions

142 bytes added ,  11 months ago
Line 3,174:
len grid[] 82
#
funcproc init . .
for pos = 1 to 81
if pos mod 9 = 1
s$ = input
if s$ = ""
s$ = input
.
len inp[] 0
b = r divfor 3i * 3= +1 cto divlen 3s$
if substr s$ i 1 <> " "
inp[] &= number substr s$ i 1
r = (pos - 1) div 9.
if dig > 0 .
.
lendig = number inp[](pos 0- 1) mod 9 + 1]
forif idig => 1 to len s$0
if substrgrid[pos] s$= i 1 <> " "dig
r inp[] &= number(pos substr- s$1) idiv 19
. c = (pos - 1) mod 9
b = r div 3 * 3 + c div 3
row[r * 10 + dig] = 1
col[c * 10 + dig] = 1
box[b * 10 + dig] = 1
.
.
dig = number inp[(pos - 1) mod 9 + 1]
if dig > 0
grid[pos] = dig
r = (pos - 1) div 9
c = (pos - 1) mod 9
b = r div 3 * 3 + c div 3
row[r * 10 + dig] = 1
col[c * 10 + dig] = 1
box[b * 10 + dig] = 1
.
.
.
call init
#
funcproc display . .
for i = 1 to 81
write grid[i] & " "
if i mod 3 = 0
write " "
.
if i mod 9 = 0
print ""
.
if i mod 27 = 0
print ""
.
.
.
#
funcproc solve pos . .
while grid[pos] <> 0
pos += 1
.
if pos > 81
# solved
call display
break 1
.
r = (pos - 1) div 9
c = (pos - 1) mod 9
b = r div 3 * 3 + c div 3
r *= 10
c *= 10
b *= 10
for d = 1 to 9
if row[r + d] = 0 and col[c + d] = 0 and box[b + d] = 0
grid[pos] = d
row[r + d] = 1
col[c + d] = 1
box[b + d] = 1
call solve pos + 1
row[r + d] = 0
col[c + d] = 0
box[b + d] = 0
.
.
grid[pos] = 0
.
call solve 1
1,981

edits