Files
advent-of-code-2025/06/main.go
2025-12-08 20:38:20 +01:00

103 lines
2.0 KiB
Go

package main
import (
"fmt"
"strings"
"git.z1glr.de/advent-of-code-2025/pkg/aoc"
)
func do(test bool) (int, int) {
inputRows := aoc.ReadFileRows(test)
return do1(&inputRows), do2(&inputRows)
}
func do1(inputRows *[]string) int {
operators := strings.Fields((*inputRows)[len(*inputRows)-1])
numbers := make([][]int, len(*inputRows)-1)
for ii, row := range (*inputRows)[:len(*inputRows)-1] {
numberStrings := strings.Fields(row)
numbers[ii] = make([]int, len(numberStrings))
for jj, number := range numberStrings {
numbers[ii][jj] = aoc.ParseInt(number)
}
}
grandSum := 0
for ii, operator := range operators {
switch operator {
case "+":
for jj := range len(numbers) {
grandSum += numbers[jj][ii]
}
case "*":
columnResult := 1
for jj := range len(numbers) {
columnResult *= numbers[jj][ii]
}
grandSum += columnResult
}
}
fmt.Println(grandSum)
return grandSum
}
func do2(inputRows *[]string) int {
operators := strings.Fields((*inputRows)[len(*inputRows)-1])
numberStrings := make([]string, len((*inputRows)[0]))
for _, row := range (*inputRows)[:len(*inputRows)-1] {
for iNumber, number := range row {
numberStrings[iNumber] += string(number)
}
}
numbers := [][]int{{}}
for _, numberString := range numberStrings {
cleanedString := strings.ReplaceAll(numberString, " ", "")
if cleanedString == "" {
numbers = append(numbers, []int{})
} else {
numbers[len(numbers)-1] = append(numbers[len(numbers)-1], aoc.ParseInt(cleanedString))
}
}
grandTotal := 0
for ii, numberPackage := range numbers {
switch operators[ii] {
case "+":
sum := 0
for _, number := range numberPackage {
sum += number
}
grandTotal += sum
case "*":
product := 1
for _, number := range numberPackage {
product *= number
}
grandTotal += product
}
}
fmt.Println(grandTotal)
return grandTotal
}
func main() {
if res1, res2 := do(true); res1 == 4277556 && res2 == 3263827 {
do(false)
}
}