78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.z1glr.de/advent-of-code-2025/pkg/aoc"
|
|
)
|
|
|
|
func do(test bool) int {
|
|
inputRows := aoc.ReadFileRows(test)
|
|
|
|
operators := strings.Fields(inputRows[len(inputRows)-1])
|
|
|
|
tdNumberStrings := make([]byte, len(inputRows[0]))
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
for ii := range len(inputRows[0]) {
|
|
for jj := 0; jj < len(inputRows)-1; jj++ {
|
|
tdNumberStrings[ii] = inputRows[ii][jj]
|
|
}
|
|
}
|
|
|
|
tdNumbers := make([][]int, len(operators))
|
|
|
|
currentOperation := 0
|
|
for _, number := range tdNumberStrings {
|
|
if strings.TrimSpace(string(number)) == "" {
|
|
currentOperation++
|
|
} else {
|
|
tdNumbers[currentOperation] = append(tdNumbers[currentOperation], aoc.ParseInt(string(number)))
|
|
}
|
|
}
|
|
|
|
grandSum := 0
|
|
grandSum2 := 0
|
|
|
|
for ii, operator := range operators {
|
|
switch operator {
|
|
case "+":
|
|
for jj := range len(numbers) {
|
|
grandSum += numbers[jj][ii]
|
|
grandSum2 += tdNumbers[jj][ii]
|
|
}
|
|
case "*":
|
|
columnResult := 1
|
|
columnResult2 := 1
|
|
for jj := range len(numbers) {
|
|
columnResult *= numbers[jj][ii]
|
|
columnResult2 *= tdNumbers[jj][ii]
|
|
}
|
|
grandSum += columnResult
|
|
grandSum2 += columnResult2
|
|
}
|
|
}
|
|
|
|
fmt.Println(grandSum)
|
|
fmt.Println(grandSum2)
|
|
|
|
return grandSum
|
|
}
|
|
|
|
func main() {
|
|
if do(true) == 4277556 {
|
|
do(false)
|
|
}
|
|
}
|