62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
// A fairly literal translation of the example program on the referenced
|
|
// WP page. Well, it happened to be the example program the day I completed
|
|
// the task. It seems from the WP history that there has been some churn
|
|
// in the posted example program. The example program of the day was in
|
|
// Pascal and was credited to Niklaus Wirth, from his "Algorithms +
|
|
// Data Structures = Programs."
|
|
package main
|
|
|
|
import "fmt"
|
|
|
|
var (
|
|
i int
|
|
q bool
|
|
a [9]bool
|
|
b [17]bool
|
|
c [15]bool // offset by 7 relative to the Pascal version
|
|
x [9]int
|
|
)
|
|
|
|
func try(i int) {
|
|
for j := 1; ; j++ {
|
|
q = false
|
|
if a[j] && b[i+j] && c[i-j+7] {
|
|
x[i] = j
|
|
a[j] = false
|
|
b[i+j] = false
|
|
c[i-j+7] = false
|
|
if i < 8 {
|
|
try(i + 1)
|
|
if !q {
|
|
a[j] = true
|
|
b[i+j] = true
|
|
c[i-j+7] = true
|
|
}
|
|
} else {
|
|
q = true
|
|
}
|
|
}
|
|
if q || j == 8 {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
for i := 1; i <= 8; i++ {
|
|
a[i] = true
|
|
}
|
|
for i := 2; i <= 16; i++ {
|
|
b[i] = true
|
|
}
|
|
for i := 0; i <= 14; i++ {
|
|
c[i] = true
|
|
}
|
|
try(1)
|
|
if q {
|
|
for i := 1; i <= 8; i++ {
|
|
fmt.Println(i, x[i])
|
|
}
|
|
}
|
|
}
|