103 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|