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) } }