Prime triangle: Difference between revisions

Content added Content deleted
(→‎{{header|Wren}}: Updated in line with Phix example of which it's a translation.)
(→‎{{header|Go}}: Updated in line with Phix example of which this is a translation.)
Line 397: Line 397:


=={{header|Go}}==
=={{header|Go}}==
Takes about 0.64 seconds.
{{trans|Phix}}
{{trans|Phix}}
<lang go>package main
<lang go>package main
Line 403: Line 404:


var canFollow [][]bool
var canFollow [][]bool
var avail []bool
var arrang []int
var arrang []int
var bCount = false
var bFirst = true


var pmap = make(map[int]bool)
var pmap = make(map[int]bool)
Line 419: Line 419:
if n-done <= 1 {
if n-done <= 1 {
if canFollow[ad-1][n-1] {
if canFollow[ad-1][n-1] {
if !bCount {
if bFirst {
for _, e := range arrang {
for _, e := range arrang {
fmt.Printf("%2d ", e)
fmt.Printf("%2d ", e)
}
}
fmt.Println()
fmt.Println()
bFirst = false
}
}
res++
res++
Line 429: Line 430:
} else {
} else {
done++
done++
for i := 1; i <= n-2; i++ {
for i := done - 1; i <= n-2; i += 2 {
if avail[i] && canFollow[ad-1][i] {
ai := arrang[i]
avail[i] = false
if canFollow[ad-1][ai-1] {
arrang[done-1] = i + 1
arrang[i], arrang[done-1] = arrang[done-1], arrang[i]
res = ptrs(res, n, done)
res = ptrs(res, n, done)
if !bCount && res != 0 {
arrang[i], arrang[done-1] = arrang[done-1], arrang[i]
return res
}
avail[i] = true
}
}
}
}
Line 453: Line 451:
}
}
}
}
avail = make([]bool, n)
bFirst = true
for i := 1; i < n-1; i++ {
arrang = make([]int, n)
avail[i] = true
for i := 0; i < n; i++ {
arrang[i] = i + 1
}
}
arrang = make([]int, n)
arrang[0] = 1
arrang[n-1] = n
return ptrs(0, n, 1)
return ptrs(0, n, 1)
}
}


func main() {
func main() {
counts := make([]int, 19)
for i := 2; i <= 20; i++ {
for i := 2; i <= 20; i++ {
primeTriangle(i)
counts[i-2] = primeTriangle(i)
}
}
fmt.Println()
fmt.Println()
bCount = true
for i := 0; i < 19; i++ {
for i := 2; i <= 20; i++ {
fmt.Printf("%d ", counts[i])
fmt.Printf("%d ", primeTriangle(i))
}
}
fmt.Println()
fmt.Println()