140 lines
2.4 KiB
Go
140 lines
2.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"bytes"
|
||
|
_ "embed"
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
//go:embed input.txt
|
||
|
var input []byte
|
||
|
|
||
|
func main() {
|
||
|
buf := bytes.NewReader(input)
|
||
|
scan := bufio.NewScanner(buf)
|
||
|
|
||
|
sum := 0
|
||
|
for scan.Scan() {
|
||
|
var first, last int
|
||
|
|
||
|
orig := scan.Text()
|
||
|
_ = orig
|
||
|
|
||
|
text := scan.Text()
|
||
|
|
||
|
slice := make([]rune, 5)
|
||
|
for i := range text {
|
||
|
copy(slice, []rune(text[i:]))
|
||
|
|
||
|
switch {
|
||
|
case slice[0] >= '0' && slice[0] <= '9':
|
||
|
first = int(slice[0] - '0')
|
||
|
case strings.HasPrefix(string(slice), "one"):
|
||
|
first = 1
|
||
|
case strings.HasPrefix(string(slice), "two"):
|
||
|
first = 2
|
||
|
case strings.HasPrefix(string(slice), "three"):
|
||
|
first = 3
|
||
|
case strings.HasPrefix(string(slice), "four"):
|
||
|
first = 4
|
||
|
case strings.HasPrefix(string(slice), "five"):
|
||
|
first = 5
|
||
|
case strings.HasPrefix(string(slice), "six"):
|
||
|
first = 6
|
||
|
case strings.HasPrefix(string(slice), "seven"):
|
||
|
first = 7
|
||
|
case strings.HasPrefix(string(slice), "eight"):
|
||
|
first = 8
|
||
|
case strings.HasPrefix(string(slice), "nine"):
|
||
|
first = 9
|
||
|
|
||
|
}
|
||
|
if first != 0 {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
text = string(reverse([]rune(text)))
|
||
|
|
||
|
for i := range text {
|
||
|
copy(slice, []rune(text[i:]))
|
||
|
slice = reverse(slice)
|
||
|
|
||
|
switch {
|
||
|
case slice[4] >= '0' && slice[4] <= '9':
|
||
|
last = int(slice[4] - '0')
|
||
|
case strings.HasSuffix(string(slice), "one"):
|
||
|
last = 1
|
||
|
case strings.HasSuffix(string(slice), "two"):
|
||
|
last = 2
|
||
|
case strings.HasSuffix(string(slice), "three"):
|
||
|
last = 3
|
||
|
case strings.HasSuffix(string(slice), "four"):
|
||
|
last = 4
|
||
|
case strings.HasSuffix(string(slice), "five"):
|
||
|
last = 5
|
||
|
case strings.HasSuffix(string(slice), "six"):
|
||
|
last = 6
|
||
|
case strings.HasSuffix(string(slice), "seven"):
|
||
|
last = 7
|
||
|
case strings.HasSuffix(string(slice), "eight"):
|
||
|
last = 8
|
||
|
case strings.HasSuffix(string(slice), "nine"):
|
||
|
last = 9
|
||
|
|
||
|
}
|
||
|
if last != 0 {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sum += first*10 + last
|
||
|
}
|
||
|
if err := scan.Err(); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
fmt.Println(sum)
|
||
|
}
|
||
|
|
||
|
func reverse[T any](arr []T) []T{
|
||
|
for i := 0; i < len(arr)/2; i++ {
|
||
|
arr[i], arr[len(arr)-i-1] = arr[len(arr)-i-1], arr[i]
|
||
|
}
|
||
|
return arr
|
||
|
}
|
||
|
|
||
|
|
||
|
// type sorter[T rune | int] []T
|
||
|
|
||
|
// func (s sorter[T]) Less(i, j int) bool { return s[i] < s[j] }
|
||
|
// func (s sorter[T]) Len() int { return len(s) }
|
||
|
// func (s sorter[T]) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||
|
|
||
|
/*
|
||
|
0
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
4
|
||
|
5
|
||
|
6
|
||
|
7
|
||
|
8
|
||
|
9
|
||
|
one
|
||
|
two
|
||
|
three
|
||
|
four
|
||
|
five
|
||
|
six
|
||
|
seven
|
||
|
eight
|
||
|
nine
|
||
|
ten
|
||
|
|
||
|
|
||
|
*/
|