blob: 31baaca8645b530b0971e72fe01192afe3d92562 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package main
import "fmt"
// 10^8 is the maximum ... So let's use uint64 ...
const LIMIT_MAX = uint64(100000000)
func reverse( in uint64 ) (out uint64) {
for ; in != 0 ; in /= 10 {
out *= 10
out += in % 10
}
return
}
func isPalindromic( in uint64 ) bool {
return in == reverse(in)
}
func showPile( slice []uint64 ) {
for i := 0 ; i < len(slice) ; i++ {
fmt.Printf("[%d]", slice[i])
}
fmt.Println("")
}
func main() {
pile := []uint64{5};
mem := [LIMIT_MAX]bool{};
for cmp := uint64(3) ; ; cmp++ {
tmp := []uint64{};
for _,v := range pile {
mem[v] = true
if v+cmp*cmp < LIMIT_MAX {
tmp = append(tmp, v+cmp*cmp);
}
}
pile = append(tmp, cmp*cmp+(cmp-1)*(cmp-1))
if len(tmp) == 0 {
break
}
}
cmp := 0
for i,v := range mem {
if v && isPalindromic(uint64(i)) {
cmp+=i
}
}
fmt.Println(cmp)
}
|