80 lines
1.3 KiB
Go
80 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
inputFile = flag.String("input", "input.txt", "input filename")
|
|
nRegex = regexp.MustCompile(`(?m)\d`)
|
|
reMap = map[string]string{
|
|
"one": "1",
|
|
"two": "2",
|
|
"three": "3",
|
|
"four": "4",
|
|
"five": "5",
|
|
"six": "6",
|
|
"seven": "7",
|
|
"eight": "8",
|
|
"nine": "9",
|
|
}
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
input, err := os.ReadFile(*inputFile)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var sum int
|
|
for _, line := range strings.Split(string(input), "\n") {
|
|
if strings.TrimSpace(line) == "" {
|
|
continue
|
|
}
|
|
|
|
var fLine, lLine string
|
|
for i := 0; i < len(line); i++ {
|
|
fLine += string(line[i])
|
|
for k, v := range reMap {
|
|
fLine = strings.ReplaceAll(fLine, k, v)
|
|
}
|
|
}
|
|
fmt.Println(fLine)
|
|
|
|
for i := len(line) - 1; i >= 0; i-- {
|
|
if i == len(line)-1 {
|
|
lLine = string(line[i])
|
|
} else {
|
|
lLine = string(line[i]) + lLine
|
|
}
|
|
|
|
for k, v := range reMap {
|
|
lLine = strings.ReplaceAll(lLine, k, v)
|
|
}
|
|
}
|
|
fmt.Println(lLine)
|
|
|
|
fMatch := nRegex.FindAllStringSubmatch(fLine, -1)
|
|
lMatch := nRegex.FindAllStringSubmatch(lLine, -1)
|
|
first := fMatch[0][0]
|
|
last := lMatch[len(lMatch)-1:][0][0]
|
|
|
|
fmt.Println(first + last)
|
|
|
|
asInt, err := strconv.Atoi(first + last)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
sum += asInt
|
|
}
|
|
|
|
fmt.Println(sum)
|
|
}
|