Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,101 @@
mata
function sudoku(a) {
s = J(81,20,.)
t = J(81,3,.)
v = J(81,9,1)
w = J(81,1,0)
for (i=1; i<=9; i++) {
for (j=1; j<=9; j++) {
n = (i-1)*9+j
k = floor((i-1)/3)*3+floor((j-1)/3)+1
t[n,.] = i,j,k
}
}
for (i=1; i<=81; i++) {
for (j=i+1; j<=81; j++) {
if (any(t[i,.]:==t[j,.])) {
w[i]=w[i]+1
w[j]=w[j]+1
s[i,w[i]] = j
s[j,w[j]] = i
}
}
}
w = J(81,1,1)
for (i=1; i<=9; i++) {
for (j=1; j<=9; j++) {
if (a[i,j]<.) {
push(a,s,t,v,w,(i-1)*9+j,a[i,j])
}
}
}
return(solve(a,s,t,v,w))
}
function solve(a,s,t,v,w) {
for (q=1; q;) {
q = 0
for (n=1; n<=81; n++) {
if (w[n]) {
r = sum(v[n,.])
if (r==0) {
return(0)
}
else if (r==1) {
q = 1
push(a,s,t,v,w,n,selectindex(v[n,.]))
}
}
}
}
if (all(w:==0)) {
return(1)
}
else {
m0 = n0 = .
for (n=1; n<=81; n++) {
m = sum(v[n,.])
if (w[n] & m>1 & m<m0) {
m0 = m
n0 = n
}
}
z = selectindex(v[n0,.])
for (i=1; i<=m0; i++) {
a2 = a
v2 = v
w2 = w
push(a2,s,t,v2,w2,n0,z[i])
if (solve(a2,s,t,v2,w2)) {
a = a2
return(1)
}
}
return(0)
}
}
function push(a,s,t,v,w,n,z) {
w[n] = 0
i = t[n,1]
j = t[n,2]
a[i,j] = z
for (k=1; k<=20; k++) {
v[s[n,k],z] = 0
}
}
a = 5,3,.,.,7,.,.,.,.\
6,.,.,1,9,5,.,.,.\
.,9,8,.,.,.,.,6,.\
8,.,.,.,6,.,.,.,3\
4,.,.,8,.,3,.,.,1\
7,.,.,.,2,.,.,.,6\
.,6,.,.,.,.,2,8,.\
.,.,.,4,1,9,.,.,5\
.,.,.,.,8,.,.,7,9
sudoku(a)
a
end

View file

@ -0,0 +1,53 @@
a = 7,9,.,.,.,3,.,.,2\
.,6,.,5,1,.,.,.,.\
.,.,.,.,.,2,.,.,6\
.,.,.,8,.,1,.,4,.\
.,.,.,.,.,.,1,.,3\
5,.,.,.,2,.,.,.,.\
.,.,.,.,.,.,.,7,4\
.,.,1,.,.,.,.,6,5\
.,.,8,.,9,7,.,.,.
sudoku(a)
a
1 2 3 4 5 6 7 8 9
+-------------------------------------+
1 | 7 9 5 6 8 3 4 1 2 |
2 | 2 6 4 5 1 9 7 3 8 |
3 | 1 8 3 7 4 2 5 9 6 |
4 | 9 3 6 8 5 1 2 4 7 |
5 | 8 4 2 9 7 6 1 5 3 |
6 | 5 1 7 3 2 4 6 8 9 |
7 | 3 2 9 1 6 5 8 7 4 |
8 | 4 7 1 2 3 8 9 6 5 |
9 | 6 5 8 4 9 7 3 2 1 |
+-------------------------------------+
a = .,.,4,1,.,.,.,.,9\
.,9,.,.,8,.,.,6,.\
6,.,.,.,.,3,7,.,.\
5,.,.,.,.,2,8,.,.\
.,4,.,.,3,.,.,2,.\
.,.,1,8,.,.,.,.,5\
.,.,2,5,.,.,.,.,3\
.,8,.,.,7,.,.,1,.\
7,.,.,.,.,1,4,.,.
sudoku(a)
a
1 2 3 4 5 6 7 8 9
+-------------------------------------+
1 | 2 7 4 1 5 6 3 8 9 |
2 | 1 9 3 7 8 4 5 6 2 |
3 | 6 5 8 2 9 3 7 4 1 |
4 | 5 3 7 6 1 2 8 9 4 |
5 | 8 4 6 9 3 5 1 2 7 |
6 | 9 2 1 8 4 7 6 3 5 |
7 | 4 1 2 5 6 8 9 7 3 |
8 | 3 8 5 4 7 9 2 1 6 |
9 | 7 6 9 3 2 1 4 5 8 |
+-------------------------------------+