day 06
This commit is contained in:
15
03/main.go
15
03/main.go
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
83
06/main.go
83
06/main.go
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user