Files
advent-of-code/internal/2015/DayTwelve/code.go

69 lines
1.2 KiB
Go

package daytwelve
import (
"encoding/json"
"os"
"regexp"
"strconv"
"strings"
"advent-of-code/internal/registry"
)
func init() {
registry.Register("2015D12", ParseInput, PartOne, PartTwo)
}
func ParseInput(filepath string) []string {
content, _ := os.ReadFile(filepath)
return strings.Split(string(content), "\n")
}
func PartOne(data []string) int {
re := regexp.MustCompile(`-?\d+`)
sum := 0
for _, line := range data {
matches := re.FindAllString(line, -1)
for _, match := range matches {
number, _ := strconv.Atoi(match)
sum += number
}
}
return sum
}
func PartTwo(data []string) int {
var sumNumbers func(any) int
sumNumbers = func(v any) int {
switch value := v.(type) {
case float64:
return int(value)
case []any:
sum := 0
for _, item := range value {
sum += sumNumbers(item)
}
return sum
case map[string]any:
sum := 0
for _, item := range value {
if str, ok := item.(string); ok && str == "red" {
return 0
}
sum += sumNumbers(item)
}
return sum
default:
return 0
}
}
sum := 0
for _, line := range data {
var value any
_ = json.Unmarshal([]byte(line), &value)
sum += sumNumbers(value)
}
return sum
}