Pages

Showing posts with label ioutil. Show all posts
Showing posts with label ioutil. Show all posts

Wednesday, July 13, 2011

Problem #11

Problem link
Solution:
package main

import (
"strconv"
"io/ioutil"
"strings"
)

func main() {
fileBuf, err := ioutil.ReadFile("011_input.txt")
if err != nil {
panic(err.String())
}
fileStr := string(fileBuf)
lines := strings.Split(fileStr, "\n", 20)
arr := make([][]uint, 20)
var strArr []string
for i := range lines {
arr[i] = make([]uint, 20)
strArr = strings.Split(lines[i], " ", 20)
for j := range arr[i] {
intvalue, _ := strconv.Atoi(strArr[j])
arr[i][j] = uint(intvalue)
}
}
max := uint(0)
//left to right
for i := range arr {
for j := 0; j < 17; j++ {
mul := arr[i][j] * arr[i][j+1] * arr[i][j+2] * arr[i][j+3]
if mul > max {
max = mul
}
}
}
//up to down
for i := 0; i < 17; i++ {
for j := range arr[i] {
mul := arr[i][j] * arr[i+1][j] * arr[i+2][j] * arr[i+3][j]
if mul > max {
max = mul
}
}
}
//first diagonal
for i := 0; i < 17; i++ {
for j := 0; j < 17; j++ {
mul := arr[i][j] * arr[i+1][j+1] * arr[i+2][j+2] * arr[i+3][j+3]
if mul > max {
max = mul
}
}
}
//second diagonal
for i := 3; i < 20; i++ {
for j := 0; j < 17; j++ {
mul := arr[i][j] * arr[i-1][j+1] * arr[i-2][j+2] * arr[i-3][j+3]
if mul > max {
max = mul
}
}
}
println(max)
}


Input file is renamed as 011_input.txt.

Result: 70600674
Time: 0m0.005s

Problem #13

Problem link
Solution:
package main

import (
"io/ioutil"
"strconv"
"strings"
)

func main() {
fileBuf, err := ioutil.ReadFile("013_input.txt")
if err != nil {
panic(err.String())
}
fileStr := string(fileBuf)
lines := strings.Split(fileStr, "\n", 100)
result := ""
carryout, digit := 0, 0
for i := 49; i >= 0; i-- {
sum := carryout
for j := range lines {
num, _ := strconv.Atoi(string(lines[j][i]))
sum += num
}
digit = sum % 10
carryout = sum / 10
result = strconv.Itoa(digit) + result
}
result = strconv.Itoa(carryout) + result
println(result[0:10])
}



Result: 5537376230
Time: 0m0.010s

Problem #18

Problem link
Solution:
package main

import (
"io/ioutil"
"strconv"
"strings"
)

var arr [][]int
var bests [][]int

func main() {
fileBuf, err := ioutil.ReadFile("018_input.txt")
if err != nil {
panic(err.String())
}
fileStr := strings.Trim(string(fileBuf), "")
oneDArrStr := strings.Split(fileStr, "\n", -1)
var line []string
arr = make([][]int, 15)
bests = make([][]int, len(arr))
for i := range arr {
line = strings.Split(oneDArrStr[i], " ", -1)
arr[i] = make([]int, len(line))
bests[i] = make([]int, len(arr[i]))
for j := range line {
arr[i][j], _ = strconv.Atoi(line[j])
bests[i][j] = -1
}
}
println(bestSum(0, 0))
}

func bestSum(i, j int) int {
var result int
if bests[i][j] != -1 {
result = bests[i][j]
} else if i == len(arr)-1 {
result = arr[i][j]
return arr[i][j]
} else {
sumLeft, sumRight := bestSum(i+1, j), bestSum(i+1, j+1)
if sumLeft > sumRight {
result = arr[i][j] + sumLeft
} else {
result = arr[i][j] + sumRight
}
}
bests[i][j] = result
return result
}


Tree is read from a file named as 018_input.txt and also memoization is used for this problem.

Result: 1074
Time: 0m0.005s

Problem #22

Problem link
Solution:
package main

import (
"io/ioutil"
"strings"
"sort"
)

func main() {
fileBuf, err := ioutil.ReadFile("022_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]
}

sort.SortStrings(arr)

result := uint64(0)
for i := range arr {
result += uint64(i+1) * uint64(alphabeticValue(arr[i]))
}
println(result)
}

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



Result: 871198282
Time: 0m0.035s

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