diff --git a/2025/day3/day3.go b/2025/day3/day3.go new file mode 100644 index 0000000..cd4b3bf --- /dev/null +++ b/2025/day3/day3.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +func runeToInt(r rune) int { + return int(r - '0') +} + +func getLargestJoltage(raw string) int { + runes := []rune(raw) + i1 := 0 + n1 := runes[i1] + for i := i1; i < len(runes)-1; i++ { + if runes[i] > n1 { + i1 = i + n1 = runes[i1] + // fmt.Printf("i: %v, n1: %v\n", i, n1) + } + } + i2 := i1 + 1 + n2 := runes[i2] + for j := i2 + 1; j < len(runes); j++ { + if runes[j] > n2 { + i2 = j + n2 = runes[i2] + // fmt.Printf("j: %v, n2: %v\n", j, n2) + } + } + return runeToInt(n1)*10 + runeToInt(n2) +} + +func part1() { + data, _ := os.ReadFile("input.txt") + content := strings.TrimSpace(string(data)) + lines := strings.Split(content, "\n") + sum := 0 + for _, line := range lines { + maxJoltage := getLargestJoltage(line) + // fmt.Println(maxJoltage) + sum += maxJoltage + } + fmt.Printf("%d\n", sum) +} + +func getLargestJoltage2(raw string) int { + runes := []rune(raw) + num := 12 + r := [12]rune{} + i := -1 + for idx := range num { + i++ + r[idx] = runes[i] + for j := i + 1; j < len(runes)-(num-idx-1); j++ { + if runes[j] > r[idx] { + i = j + r[idx] = runes[i] + } + } + } + result := 0 + for i := range num { + result *= 10 + result += runeToInt(r[i]) + } + return result +} + +func part2() { + data, _ := os.ReadFile("input.txt") + content := strings.TrimSpace(string(data)) + lines := strings.Split(content, "\n") + sum := 0 + for _, line := range lines { + maxJoltage := getLargestJoltage2(line) + // fmt.Println(maxJoltage) + sum += maxJoltage + } + fmt.Printf("%d\n", sum) +} + +func main() { + part1() + part2() +} diff --git a/2025/day3/go.mod b/2025/day3/go.mod new file mode 100644 index 0000000..f068770 --- /dev/null +++ b/2025/day3/go.mod @@ -0,0 +1,3 @@ +module day3 + +go 1.23.4