Finished 1st day

Refactor digit parsing logic and improve variable names
This commit is contained in:
Luna 2023-12-18 17:41:12 +01:00
parent 6c29a1abc1
commit fb147e38db

View file

@ -1,56 +1,14 @@
package main package main
import ( import (
"bufio"
"errors" "errors"
"fmt" "fmt"
"io" "io"
"log"
"os" "os"
"regexp" "strings"
) )
func readInput() string { var digitsMap = map[string]int{
stdin, err := io.ReadAll(os.Stdin)
if err != nil {
panic(err)
}
str := string(stdin)
return str
}
func readFile() string {
file, err := os.ReadFile("input.txt")
if err != nil {
panic(err)
}
str := string(file)
return str
}
func readFileLineByLine() []string {
var lines []string
file, err := os.Open("input.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
// optionally, resize scanner's capacity for lines over 64K, see next example
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
return lines
}
func parseDigit(input string) (int, error) {
digits := map[string]int{
"one": 1, "one": 1,
"two": 2, "two": 2,
"three": 3, "three": 3,
@ -70,55 +28,54 @@ func parseDigit(input string) (int, error) {
"8": 8, "8": 8,
"9": 9, "9": 9,
} }
i, ok := digits[input]
func readInput() string {
stdin, err := io.ReadAll(os.Stdin)
if err != nil {
panic(err)
}
str := string(stdin)
return str
}
func parseDigit(input string) (int, error) {
i, ok := digitsMap[input]
if ok == false { if ok == false {
return 0, errors.New("err") return 0, errors.New("err")
} }
return i, nil return i, nil
} }
// func addDStrings(input1 string, input2 string) string { func getDigit(line string) []int {
// num1, err := parseDigit(input1) digits := []int{}
// if err != nil { for i, c := range line {
// num1 = input1 if dig, err := parseDigit(string(c)); err == nil {
// log.Fatalln(err) digits = append(digits, dig)
// } } else {
// num2, err := parseDigit(input2) for spelling, number := range digitsMap {
// if err != nil { if strings.HasPrefix(line[i:], spelling) {
// num2 = input2 digits = append(digits, number)
// log.Fatalln(err) }
// } }
// num_str := num1 + num2 }
// println(num_str) }
// return num_str return digits
// } }
func main() { func main() {
// lines := strings.Split(readFile(), "\n") lines := strings.Split(readInput(), "\n")
lines := readFileLineByLine()
re := regexp.MustCompile(`(one|two|three|four|five|six|seven|eight|nine|\d)`)
var answer int var answer int
for _, l := range lines { for _, l := range lines {
matches := re.FindAllString(l, -1) matches := getDigit(l)
matches_len := len(matches) if len(matches) == 0 {
if matches_len == 0 { continue
break
} }
first := matches[0] first := matches[0]
last := matches[matches_len-1] last := matches[len(matches)-1]
num_f, err := parseDigit(first) num := (first * 10) + last
if err != nil {
log.Fatalln(err)
}
num_l, err := parseDigit(last)
// num_str := addDStrings(first, last)
// num, err := strconv.Atoi(num_str)
if err != nil {
log.Fatalln(err)
}
num := (num_f * 10) + num_l
answer = answer + num answer = answer + num
fmt.Println(l, first, last, num) // fmt.Println(l, first, last, num)
} }
fmt.Println(answer) fmt.Println(answer)
} }