86 lines
1.4 KiB
Go
86 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func readInput() string {
|
|
stdin, err := io.ReadAll(os.Stdin)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
str := string(stdin)
|
|
return str
|
|
}
|
|
|
|
func parseDigit(input string) (string, error) {
|
|
digits := map[string]string{
|
|
"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 {
|
|
return "", errors.New("No spelled digit")
|
|
}
|
|
return i, nil
|
|
}
|
|
|
|
func addDStrings(input1 string, input2 string) string {
|
|
num1, err := parseDigit(input1)
|
|
if err != nil {
|
|
num1 = input1
|
|
}
|
|
num2, err := parseDigit(input2)
|
|
if err != nil {
|
|
num2 = input2
|
|
}
|
|
num_str := num1 + num2
|
|
return num_str
|
|
}
|
|
|
|
func main() {
|
|
lines := strings.Split(readInput(), "\n")
|
|
re := regexp.MustCompile(`(one|two|three|four|five|six|seven|eight|nine|\d)`)
|
|
var answer int
|
|
for _, l := range lines {
|
|
matches := re.FindAllString(l, -1)
|
|
matches_len := len(matches)
|
|
if matches_len == 0 {
|
|
continue
|
|
}
|
|
first := matches[0]
|
|
last := matches[matches_len-1]
|
|
num_str := addDStrings(first, last)
|
|
num, err := strconv.Atoi(num_str)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
answer = answer + num
|
|
fmt.Println(l, first, last, num)
|
|
}
|
|
fmt.Println(answer)
|
|
}
|