Pages

Showing posts with label triangle. Show all posts
Showing posts with label triangle. Show all posts

Wednesday, July 13, 2011

Problem #12

Problem link
Solution:
package main

import (
"math"
)

func main() {
divisors := 1
triangleN := uint64(1)
for i := 2; divisors < 500; i++ {
triangleN += uint64(i)
divisors = noOfDivisors(triangleN)
}
println(triangleN)
}

func noOfDivisors(number uint64) int {
counter := 0
limit := uint64(math.Sqrt(float64(number)))
for i := 1; uint64(i) <= limit; i++ {
if number%uint64(i) == 0 {
counter += 2
}
}
return counter
}



Result: 76576500
Time: 0m1.010s

Problem #42

Problem link
Solution:
package main

import (
"io/ioutil"
"strings"
)

var triangles []int

func main() {
//read names
fileBuf, err := ioutil.ReadFile("042_input.txt")
if err != nil {
panic(err.String())
}
fileStr := string(fileBuf)
arr := strings.Split(fileStr, ",", -1)
for i := range arr {
arr[i] = strings.Split(arr[i], "\"", -1)[1]
}

//create an array of triangle numbers
triangles = make([]int, 20)
for i := range triangles {
triangles[i] = (i * (i + 1)) / 2
}

//iterate over names to check
result := 0
for i := range arr {
if isTriangle(alphabeticValue(arr[i])) {
result++
}
}
println(result)
}

func isTriangle(in int) bool {
for i := range triangles {
if triangles[i] == in {
return true
}
}
return false
}

func alphabeticValue(in string) int {
sum := 0
for i := range in {
sum += int(in[i]) - int('A') + 1
}
return sum
}



Result: 162
Time: 0m0.009s

Problem #45

Problem link
Solution:
package main

var arr []int64 //pentagonals

func main() {
arr = make([]int64, 80000)
for i := 1; i < len(arr); i++ {
arr[i] = int64(i) * (3*int64(i) - 1) / 2
}
var tmp int64
i := 144
loop:
for {
tmp = int64(i) * int64(2*i-1)
if isPentagonal(tmp) { //every hexagonal is also triangle
println(tmp)
break loop
}
i++
}
}

func isPentagonal(in int64) bool {
return search(in, 1, len(arr)-1)
}

func search(value int64, low, high int) bool {
if high < low {
return false
}
mid := low + (high-low)/2
if arr[mid] > value {
return search(value, low, mid-1)
} else if arr[mid] < value {
return search(value, mid+1, high)
}
return true
}



Result: 1533776805
Time: 0m0.035s