This commit is contained in:
z1glr
2025-12-08 20:38:20 +01:00
parent 0cf3fb738c
commit 8da2c12663
3 changed files with 55 additions and 47 deletions

View File

@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"math" "math"
"os" "os"
"strconv"
"strings" "strings"
) )
@@ -13,22 +12,18 @@ func countJoltage(i int, rows *[][]int) int {
for _, rowNumbers := range *rows { for _, rowNumbers := range *rows {
index := 0 index := 0
thisJoltage := 0
for digitPlace := range i { for digitPlace := range i {
index = int(math.Max(float64(index), float64(digitPlace)))
for candidate := index; candidate <= len(rowNumbers)-i+digitPlace; candidate++ { for candidate := index; candidate <= len(rowNumbers)-i+digitPlace; candidate++ {
if rowNumbers[candidate] > rowNumbers[index] { if rowNumbers[candidate] > rowNumbers[index] {
index = candidate index = candidate
} }
} }
thisJoltage += rowNumbers[index] * int(math.Pow10(i-digitPlace-1)) totalJoltage += rowNumbers[index] * int(math.Pow10(i-digitPlace-1))
index++ index++
} }
totalJoltage += thisJoltage
} }
return totalJoltage return totalJoltage
@@ -66,11 +61,3 @@ func loadData(test bool) string {
return strings.TrimSpace(string(cont)) return strings.TrimSpace(string(cont))
} }
} }
func parseInt(s string) int {
if ii, err := strconv.Atoi(s); err != nil {
panic(err)
} else {
return ii
}
}

View File

@@ -7,15 +7,17 @@ import (
"git.z1glr.de/advent-of-code-2025/pkg/aoc" "git.z1glr.de/advent-of-code-2025/pkg/aoc"
) )
func do(test bool) int { func do(test bool) (int, int) {
inputRows := aoc.ReadFileRows(test) inputRows := aoc.ReadFileRows(test)
operators := strings.Fields(inputRows[len(inputRows)-1]) return do1(&inputRows), do2(&inputRows)
}
tdNumberStrings := make([]byte, len(inputRows[0])) func do1(inputRows *[]string) int {
operators := strings.Fields((*inputRows)[len(*inputRows)-1])
numbers := make([][]int, len(inputRows)-1) numbers := make([][]int, len(*inputRows)-1)
for ii, row := range inputRows[:len(inputRows)-1] { for ii, row := range (*inputRows)[:len(*inputRows)-1] {
numberStrings := strings.Fields(row) numberStrings := strings.Fields(row)
numbers[ii] = make([]int, len(numberStrings)) numbers[ii] = make([]int, len(numberStrings))
@@ -25,53 +27,76 @@ func do(test bool) int {
} }
} }
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 grandSum := 0
grandSum2 := 0
for ii, operator := range operators { for ii, operator := range operators {
switch operator { switch operator {
case "+": case "+":
for jj := range len(numbers) { for jj := range len(numbers) {
grandSum += numbers[jj][ii] grandSum += numbers[jj][ii]
grandSum2 += tdNumbers[jj][ii]
} }
case "*": case "*":
columnResult := 1 columnResult := 1
columnResult2 := 1
for jj := range len(numbers) { for jj := range len(numbers) {
columnResult *= numbers[jj][ii] columnResult *= numbers[jj][ii]
columnResult2 *= tdNumbers[jj][ii]
} }
grandSum += columnResult grandSum += columnResult
grandSum2 += columnResult2
} }
} }
fmt.Println(grandSum) fmt.Println(grandSum)
fmt.Println(grandSum2)
return 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() { func main() {
if do(true) == 4277556 { if res1, res2 := do(true); res1 == 4277556 && res2 == 3263827 {
do(false) do(false)
} }
} }

View File

@@ -24,9 +24,5 @@ func ReadFileRows(test bool) []string {
rows := strings.Split(cont, "\n") rows := strings.Split(cont, "\n")
for ii, rr := range rows {
rows[ii] = strings.TrimSpace(rr)
}
return rows return rows
} }