mirror of
https://github.com/tiennm99/adventofcode.git
synced 2026-10-13 20:14:25 +00:00
feat(2025): add day3
This commit is contained in:
1 parent
9a869dc923
commit
f017a3aaf7
2 files changed
+91
No files matched your search
@@ -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()
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module day3
|
||||||
|
|
||||||
|
go 1.23.4
|
||||||
Reference in new issue
Block a user