September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -0,0 +1,60 @@
mata
real matrix queens(real scalar n) {
real scalar i, j, k, p, q
real rowvector a, s, u, v
real matrix m
m = J(0, n, .)
a = 1..n
s = J(1, n, 0)
u = J(1, 2*n-1, 1)
v = J(1, 2*n-1, 1)
i = j = 1
L1: k = a[j]
a[j] = a[i]
a[i] = k
p = i-k+n
q = i+k-1
if (u[p] & v[q]) {
s[i++] = j
u[p] = v[q] = 0
if (i > n) {
m = m\a
goto L3
}
j = i
goto L1
}
L2: if (++j <= n) goto L1
while (--j > i) {
k = a[i]
a[i] = a[j]
a[j] = k
}
L3: if (--i == 0) return(m)
p = i-a[i]+n
q = i+a[i]-1
j = s[i]
u[p] = v[q] = 1
goto L2
}
a = queens(8)
e = I(8)
1:/e[a[1,.],.]
1 2 3 4 5 6 7 8
+---------------------------------+
1 | 1 . . . . . . . |
2 | . . . . 1 . . . |
3 | . . . . . . . 1 |
4 | . . . . . 1 . . |
5 | . . 1 . . . . . |
6 | . . . . . . 1 . |
7 | . 1 . . . . . . |
8 | . . . 1 . . . . |
+---------------------------------+
rows(a)
92
end

View file

@ -0,0 +1,4 @@
clear
mata: a=queens(8)
getmata (a*)=a
save queens, replace

View file

@ -0,0 +1,58 @@
mata
real matrix queens(real scalar n) {
real rowvector a, u, v
real matrix m
a = 1..n
u = J(1, 2*n-1, 1)
v = J(1, 2*n-1, 1)
m = J(0, n, .)
queens_aux(n, 1, a, u, v, m)
return(m)
}
void queens_aux(real scalar n, real scalar i, real rowvector a,
real rowvector u, real rowvector v, real matrix m) {
real scalar j, k, s
if (i > n) {
m = m\a
} else {
for (k = i; k <= n; k++) {
j = a[k]
p = i+j-1
q = i-j+n
if (u[p] & v[q]) {
u[p] = v[q] = 0
s = a[i]
a[i] = a[k]
a[k] = s
queens_aux(n, i+1, a, u, v, m)
u[p] = v[q] = 1
s = a[i]
a[i] = a[k]
a[k] = s
}
}
}
}
a = queens(8)
e = I(8)
1:/e[a[1,.],.]
1 2 3 4 5 6 7 8
+---------------------------------+
1 | 1 . . . . . . . |
2 | . . . . 1 . . . |
3 | . . . . . . . 1 |
4 | . . . . . 1 . . |
5 | . . 1 . . . . . |
6 | . . . . . . 1 . |
7 | . 1 . . . . . . |
8 | . . . 1 . . . . |
+---------------------------------+
rows(a)
92
end