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,
}