github.com/agrigoryan/aoc_2023_go@v0.0.0-20231216221323-4ace361ec685/day1/d1p2.go (about) 1 package day1 2 3 import ( 4 "fmt" 5 "regexp" 6 "strings" 7 ) 8 9 var digits = map[string]int{ 10 "one": 1, 11 "1": 1, 12 "two": 2, 13 "2": 2, 14 "three": 3, 15 "3": 3, 16 "four": 4, 17 "4": 4, 18 "five": 5, 19 "5": 5, 20 "six": 6, 21 "6": 6, 22 "seven": 7, 23 "7": 7, 24 "eight": 8, 25 "8": 8, 26 "nine": 9, 27 "9": 9, 28 } 29 30 func findSumWithRegexp(lines []string) int { 31 sum := 0 32 re := regexp.MustCompile(`(\d|one|two|three|four|five|six|seven|eight|nine)`) 33 for _, line := range lines { 34 matches := re.FindAllString(line, len(line)) 35 fmt.Println(line, matches) 36 d1, d2 := matches[0], matches[len(matches)-1] 37 fmt.Println(d1, d2) 38 sum += digits[d1]*10 + digits[d2] 39 } 40 return sum 41 } 42 43 func findSumBrutally(lines []string) int { 44 sum := 0 45 for _, line := range lines { 46 first_digit, last_digit := 0, 0 47 first_idx, last_idx := -1, -1 48 for k, v := range digits { 49 if i := strings.Index(line, k); i != -1 && (i < first_idx || first_idx == -1) { 50 first_idx = i 51 first_digit = v 52 } 53 if i := strings.LastIndex(line, k); i > last_idx || last_idx == -1 { 54 last_idx = i 55 last_digit = v 56 } 57 } 58 fmt.Println(line, first_digit, last_digit) 59 sum += first_digit*10 + last_digit 60 } 61 return sum 62 } 63 64 func d1p2(input string) int { 65 sum := findSumBrutally(strings.Split(input, "\n")) 66 fmt.Println(sum) 67 return sum 68 }