Prime triangle: Difference between revisions
Content added Content deleted
(Added C solution) |
(Added Go) |
||
Line 395: | Line 395: | ||
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
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> |
</pre> |
||