Finished 1st day
Refactor digit parsing logic and improve variable names
This commit is contained in:
parent
6c29a1abc1
commit
fb147e38db
1 changed files with 45 additions and 88 deletions
133
day1/part2.go
133
day1/part2.go
|
@ -1,15 +1,34 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var digitsMap = map[string]int{
|
||||||
|
"one": 1,
|
||||||
|
"two": 2,
|
||||||
|
"three": 3,
|
||||||
|
"four": 4,
|
||||||
|
"five": 5,
|
||||||
|
"six": 6,
|
||||||
|
"seven": 7,
|
||||||
|
"eight": 8,
|
||||||
|
"nine": 9,
|
||||||
|
"1": 1,
|
||||||
|
"2": 2,
|
||||||
|
"3": 3,
|
||||||
|
"4": 4,
|
||||||
|
"5": 5,
|
||||||
|
"6": 6,
|
||||||
|
"7": 7,
|
||||||
|
"8": 8,
|
||||||
|
"9": 9,
|
||||||
|
}
|
||||||
|
|
||||||
func readInput() string {
|
func readInput() string {
|
||||||
stdin, err := io.ReadAll(os.Stdin)
|
stdin, err := io.ReadAll(os.Stdin)
|
||||||
|
|
||||||
|
@ -20,105 +39,43 @@ func readInput() string {
|
||||||
return str
|
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) {
|
func parseDigit(input string) (int, error) {
|
||||||
digits := map[string]int{
|
i, ok := digitsMap[input]
|
||||||
"one": 1,
|
|
||||||
"two": 2,
|
|
||||||
"three": 3,
|
|
||||||
"four": 4,
|
|
||||||
"five": 5,
|
|
||||||
"six": 6,
|
|
||||||
"seven": 7,
|
|
||||||
"eight": 8,
|
|
||||||
"nine": 9,
|
|
||||||
"1": 1,
|
|
||||||
"2": 2,
|
|
||||||
"3": 3,
|
|
||||||
"4": 4,
|
|
||||||
"5": 5,
|
|
||||||
"6": 6,
|
|
||||||
"7": 7,
|
|
||||||
"8": 8,
|
|
||||||
"9": 9,
|
|
||||||
}
|
|
||||||
i, ok := digits[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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue