summaryrefslogtreecommitdiff
path: root/p125/p_125.go
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)
}