Skip to content

Instantly share code, notes, and snippets.

@gbmor
Created December 1, 2023 15:05
Show Gist options
  • Save gbmor/77be6fbbcf9a32de4edf77975e160175 to your computer and use it in GitHub Desktop.
Save gbmor/77be6fbbcf9a32de4edf77975e160175 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"os"
"strings"
"time"
"unicode"
)
func parseInput(test bool) []string {
var data []byte
if test {
data = []byte(`two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen`)
} else {
b, err := os.ReadFile("input.txt")
if err != nil {
log.Println(err.Error())
os.Exit(1)
}
data = b
}
return strings.Split(string(data), "\n")
}
func solve(in []string) (int, int) {
letts := []string{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
sum1, sum2 := 0, 0
for _, e := range in {
digs1, digs2 := make([]int, 0, 4), make([]int, 0, 4)
for i, c := range e {
if unicode.IsDigit(c) {
dig := int(c - '0')
digs1 = append(digs1, dig)
digs2 = append(digs2, dig)
} else {
for k, n := range letts {
if strings.HasPrefix(e[i:], n) {
digs2 = append(digs2, k)
break
}
}
}
}
if len(digs1) < 2 {
digs1 = append(digs1, digs1[0])
}
if len(digs2) < 2 {
digs2 = append(digs2, digs2[0])
}
num1 := 10 * digs1[0]
num1 += digs1[len(digs1)-1]
sum1 += num1
num2 := 10 * digs2[0]
num2 += digs2[len(digs2)-1]
sum2 += num2
}
return sum1, sum2
}
func main() {
start := time.Now()
data := parseInput(false)
solveStart := time.Now()
p1, p2 := solve(data)
solveTime := time.Since(solveStart)
fmt.Printf("Part 1:\t%v\n", p1)
fmt.Printf("Part 2:\t%v\n", p2)
fmt.Printf("Solve Time:\t%s\n", solveTime)
fmt.Printf("Run Time:\t%s\n", time.Since(start))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment