Files
2023-12-02 20:16:27 +01:00

80 lines
1.6 KiB
Go

package day01
import (
"strings"
"unicode"
)
func Part1(input string) uint {
lines := strings.Split(input, "\n")
sum := uint(0)
for i := 0; i < len(lines); i++ {
line := lines[i]
for j := 0; j < len(line); j++ {
if unicode.IsNumber(rune(line[j])) {
sum = sum + uint(line[j]-'0')*10
break
}
}
for j := len(line) - 1; j >= 0; j-- {
if unicode.IsNumber(rune(line[j])) {
sum = sum + uint(line[j]-'0')
break
}
}
}
return sum
}
func Part2(input string) uint {
lines := strings.Split(input, "\n")
sum := uint(0)
for i := 0; i < len(lines); i++ {
line := lines[i]
for j := 0; j < len(line); j++ {
n, found := writtenNumberAt(line, j)
if found {
sum = sum + n*10
break
}
}
for j := len(line) - 1; j >= 0; j-- {
n, found := writtenNumberAt(line, j)
if found {
sum = sum + n
break
}
}
}
return sum
}
func writtenNumberAt(line string, i int) (n uint, found bool) {
if unicode.IsNumber(rune(line[i])) {
return uint(line[i] - '0'), true
} else if strings.HasPrefix(line[i:], "one") {
return 1, true
} else if strings.HasPrefix(line[i:], "two") {
return 2, true
} else if strings.HasPrefix(line[i:], "three") {
return 3, true
} else if strings.HasPrefix(line[i:], "four") {
return 4, true
} else if strings.HasPrefix(line[i:], "five") {
return 5, true
} else if strings.HasPrefix(line[i:], "six") {
return 6, true
} else if strings.HasPrefix(line[i:], "seven") {
return 7, true
} else if strings.HasPrefix(line[i:], "eight") {
return 8, true
} else if strings.HasPrefix(line[i:], "nine") {
return 9, true
} else {
return 0, false
}
}