4 "adventofcode2023/utils"
8 func Part1(input string) int {
10 lines := strings.Split(input, "\n")
11 for _, line := range lines {
12 for i:=0;i<len(line);i++ {
13 if line[i] >= '0' && line[i] <= '9' {
14 num += utils.MustAtoi(string(line[i])) * 10
18 for i:=len(line) - 1;i>=0;i-- {
19 if line[i] >= '0' && line[i] <= '9' {
20 num += utils.MustAtoi(string(line[i]))
29 func Part2(input string) int {
30 digits := make(map[string]string)
41 digits_backwards := make(map[string]string)
42 digits_backwards["eno"] = "1"
43 digits_backwards["owt"] = "2"
44 digits_backwards["eerht"] = "3"
45 digits_backwards["ruof"] = "4"
46 digits_backwards["evif"] = "5"
47 digits_backwards["xis"] = "6"
48 digits_backwards["neves"] = "7"
49 digits_backwards["thgie"] = "8"
50 digits_backwards["enin"] = "9"
54 lines := strings.Split(input, "\n")
55 for _, line := range lines {
56 for i:=0;i<len(line);i++ {
57 if line[i] >= '0' && line[i] <= '9' {
58 fmt.Println("first digit:", string(line[i]))
59 num += utils.MustAtoi(string(line[i])) * 10
63 for key := range digits {
64 if strings.HasPrefix(line[i:], key) {
65 fmt.Println("first digit:", digits[key])
66 num += utils.MustAtoi(digits[key]) * 10
75 reverse := reverseString(line)
77 for i:=0;i<len(reverse);i++ {
78 if reverse[i] >= '0' && reverse[i] <= '9' {
79 fmt.Println("last digit:", string(reverse[i]))
80 num += utils.MustAtoi(string(reverse[i]))
84 for key := range digits_backwards {
85 if strings.HasPrefix(reverse[i:], key) {
86 fmt.Println("last digit:", digits_backwards[key])
87 num += utils.MustAtoi(digits_backwards[key])
99 func reverseString(input string) string {
100 // Convert the string to a rune slice
101 runes := []rune(input)
103 // Get the length of the rune slice
106 // Reverse the order of runes
107 for i, j := 0, length-1; i < j; i, j = i+1, j-1 {
108 runes[i], runes[j] = runes[j], runes[i]
111 // Convert the reversed rune slice back to a string
112 reversedString := string(runes)
114 return reversedString