Created
December 1, 2023 15:05
-
-
Save gbmor/77be6fbbcf9a32de4edf77975e160175 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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