Jump to content

Prime triangle: Difference between revisions

Added Go
(Added C solution)
(Added Go)
Line 395:
 
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162
</pre>
 
=={{header|Go}}==
{{trans|Phix}}
<lang go>package main
 
import "fmt"
 
var canFollow [][]bool
var avail []bool
var arrang []int
var bCount = false
 
var pmap = make(map[int]bool)
 
func init() {
for _, i := range []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37} {
pmap[i] = true
}
}
 
func ptrs(res, n, done int) int {
ad := arrang[done-1]
if n-done <= 1 {
if canFollow[ad-1][n-1] {
if !bCount {
for _, e := range arrang {
fmt.Printf("%2d ", e)
}
fmt.Println()
}
res++
}
} else {
done++
for i := 1; i <= n-2; i++ {
if avail[i] && canFollow[ad-1][i] {
avail[i] = false
arrang[done-1] = i + 1
res = ptrs(res, n, done)
if !bCount && res != 0 {
return res
}
avail[i] = true
}
}
}
return res
}
 
func primeTriangle(n int) int {
canFollow = make([][]bool, n)
for i := 0; i < n; i++ {
canFollow[i] = make([]bool, n)
for j := 0; j < n; j++ {
_, ok := pmap[i+j+2]
canFollow[i][j] = ok
}
}
avail = make([]bool, n)
for i := 1; i < n-1; i++ {
avail[i] = true
}
arrang = make([]int, n)
arrang[0] = 1
arrang[n-1] = n
return ptrs(0, n, 1)
}
 
func main() {
for i := 2; i <= 20; i++ {
primeTriangle(i)
}
fmt.Println()
bCount = true
for i := 2; i <= 20; i++ {
fmt.Printf("%d ", primeTriangle(i))
}
fmt.Println()
}</lang>
 
{{out}}
<pre>
1 2
1 2 3
1 2 3 4
1 4 3 2 5
1 4 3 2 5 6
1 4 3 2 5 6 7
1 2 3 4 7 6 5 8
1 2 3 4 7 6 5 8 9
1 2 3 4 7 6 5 8 9 10
1 2 3 4 7 10 9 8 5 6 11
1 2 3 4 7 10 9 8 5 6 11 12
1 2 3 4 7 6 5 12 11 8 9 10 13
1 2 3 4 7 6 13 10 9 8 11 12 5 14
1 2 3 4 7 6 13 10 9 8 11 12 5 14 15
1 2 3 4 7 6 5 12 11 8 15 14 9 10 13 16
1 2 3 4 7 6 5 12 11 8 9 10 13 16 15 14 17
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 19 18 11 20
 
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162
</pre>
 
9,485

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.