day1, part2
This commit is contained in:
parent
c1794a56ec
commit
bdcdc1cdb6
|
@ -5,11 +5,12 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func Run() {
|
||||
file, err := os.Open("./day1/example.txt")
|
||||
file, err := os.Open("./day1/input")
|
||||
if err != nil {
|
||||
log.Print("error opening file")
|
||||
return
|
||||
|
@ -22,8 +23,9 @@ func Run() {
|
|||
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
first := getFirstDigit(line)
|
||||
last := getLastDigit(line)
|
||||
allDigits := getDigits(line)
|
||||
first := allDigits[0]
|
||||
last := allDigits[len(allDigits) - 1]
|
||||
|
||||
num := first * 10 + last
|
||||
result += num
|
||||
|
@ -32,6 +34,43 @@ func Run() {
|
|||
fmt.Printf(">> day 1 result is %d", result)
|
||||
}
|
||||
|
||||
func getDigits(line string) []int {
|
||||
result := make([]int, 0)
|
||||
for ind, ch := range line {
|
||||
if unicode.IsDigit(ch) {
|
||||
result = append(result, int(ch - '0'))
|
||||
}
|
||||
wordDigit, found := getTheDigitSubstringAt(line, ind)
|
||||
if found {
|
||||
result = append(result, wordDigit)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
var theDigits map[string]int = map[string]int{
|
||||
"one": 1,
|
||||
"two": 2,
|
||||
"three": 3,
|
||||
"four": 4,
|
||||
"five": 5,
|
||||
"six": 6,
|
||||
"seven": 7,
|
||||
"eight": 8,
|
||||
"nine": 9,
|
||||
}
|
||||
|
||||
func getTheDigitSubstringAt(line string, index int) (digit int, found bool) {
|
||||
lineFromIndex := line[index:]
|
||||
for key, num := range theDigits {
|
||||
if strings.HasPrefix(lineFromIndex, key) {
|
||||
return num, true
|
||||
}
|
||||
}
|
||||
|
||||
return 0, false
|
||||
}
|
||||
|
||||
func getFirstDigit(line string) int {
|
||||
for _, ch := range line {
|
||||
if unicode.IsDigit(ch) {
|
||||
|
|
Loading…
Reference in New Issue