(Go) day 8 part 1 done

This commit is contained in:
kageru 2018-12-09 17:26:46 +01:00
parent d1b813c338
commit fdb838bab3
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 51 additions and 0 deletions

1
08/input Normal file

File diff suppressed because one or more lines are too long

50
08/main.go Normal file
View File

@ -0,0 +1,50 @@
package main
import (
"fmt"
"io/ioutil"
"strconv"
"strings"
)
type Node struct {
Metadata []int
Children []Node
}
func parseNode(input []int, start int) (parsed Node, end int) {
numChildren := input[start]
numMeta := input[start+1]
start += 2
for i := 0; i < numChildren; i++ {
var child Node
child, start = parseNode(input, start)
parsed.Children = append(parsed.Children, child)
}
for i := 0; i < numMeta; i++ {
parsed.Metadata = append(parsed.Metadata, input[start])
start++
}
return parsed, start
}
func metaSum(root Node) (sum int) {
for _, c := range root.Children {
sum += metaSum(c)
}
for _, m := range root.Metadata {
sum += m
}
return sum
}
func main() {
inFile, _ := ioutil.ReadFile("input")
rawInput := strings.Split(string(inFile), " ")
input := make([]int, len(rawInput))
for i, s := range rawInput {
input[i], _ = strconv.Atoi(s)
}
root, _ := parseNode(input, 0)
fmt.Println(metaSum(root))
}