Trebuchet?!
Description: https://adventofcode.com/2023/day/1
package main
import (
"bufio"
"io"
"os"
)
var sum int = 0
var firstNumber int = -1
var lastNumber int = -1
var textNumbers []string = []string{}
func day1(part int) {
if part == 0 {
part = 1
} else if part > 2 {
panic("Invalid part")
}
f, _ := os.Open("./inputs/day1.txt")
r := bufio.NewReader(f)
for {
rune, _, err := r.ReadRune()
if err == io.EOF {
break
} else if rune == '\n' {
addValue()
} else if '0' <= rune && rune <= '9' {
assignNumber(int(rune - '0'))
} else {
if part == 2 {
handleTextNumber(rune)
}
}
}
println(sum)
}
func assignNumber(number int) {
if firstNumber == -1 {
firstNumber = number
} else {
lastNumber = number
}
}
func handleTextNumber(nextChar rune) {
textNumbers = append(textNumbers, string(nextChar))
for i, value := range textNumbers[:len(textNumbers)-1] {
current := value + string(nextChar)
if number, ok := numbers[current]; ok {
assignNumber(number)
}
textNumbers[i] = current
}
}
func addValue() {
var last int
if lastNumber != -1 {
last = lastNumber
} else {
last = firstNumber
}
sum += firstNumber*10 + last
firstNumber = -1
lastNumber = -1
textNumbers = []string{}
}
var numbers = map[string]int{
"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9,
}