diff --git a/03/main.go b/03/main.go index 6529ac5..0a1902a 100644 --- a/03/main.go +++ b/03/main.go @@ -4,7 +4,6 @@ import ( "fmt" "math" "os" - "strconv" "strings" ) @@ -13,22 +12,18 @@ func countJoltage(i int, rows *[][]int) int { for _, rowNumbers := range *rows { index := 0 - thisJoltage := 0 for digitPlace := range i { - index = int(math.Max(float64(index), float64(digitPlace))) - for candidate := index; candidate <= len(rowNumbers)-i+digitPlace; candidate++ { if rowNumbers[candidate] > rowNumbers[index] { index = candidate } } - thisJoltage += rowNumbers[index] * int(math.Pow10(i-digitPlace-1)) + totalJoltage += rowNumbers[index] * int(math.Pow10(i-digitPlace-1)) index++ } - totalJoltage += thisJoltage } return totalJoltage @@ -66,11 +61,3 @@ func loadData(test bool) string { return strings.TrimSpace(string(cont)) } } - -func parseInt(s string) int { - if ii, err := strconv.Atoi(s); err != nil { - panic(err) - } else { - return ii - } -} diff --git a/06/main.go b/06/main.go index 426d29b..c579ca5 100644 --- a/06/main.go +++ b/06/main.go @@ -7,15 +7,17 @@ import ( "git.z1glr.de/advent-of-code-2025/pkg/aoc" ) -func do(test bool) int { +func do(test bool) (int, int) { 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) - for ii, row := range 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)) @@ -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 - 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 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 do(true) == 4277556 { + if res1, res2 := do(true); res1 == 4277556 && res2 == 3263827 { do(false) } } diff --git a/pkg/aoc/readFile.go b/pkg/aoc/readFile.go index 751becc..b240f3c 100644 --- a/pkg/aoc/readFile.go +++ b/pkg/aoc/readFile.go @@ -24,9 +24,5 @@ func ReadFileRows(test bool) []string { rows := strings.Split(cont, "\n") - for ii, rr := range rows { - rows[ii] = strings.TrimSpace(rr) - } - return rows }