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]))
30 func Part2(input string) int {
31 digits := make(map[string]string)
42 digits_backwards := make(map[string]string)
43 digits_backwards["eno"] = "1"
44 digits_backwards["owt"] = "2"
45 digits_backwards["eerht"] = "3"
46 digits_backwards["ruof"] = "4"
47 digits_backwards["evif"] = "5"
48 digits_backwards["xis"] = "6"
49 digits_backwards["neves"] = "7"
50 digits_backwards["thgie"] = "8"
51 digits_backwards["enin"] = "9"
55 lines := strings.Split(input, "\n")
56 for _, line := range lines {
57 for i:=0;i<len(line);i++ {
58 if line[i] >= '0' && line[i] <= '9' {
59 fmt.Println("first digit:", string(line[i]))
60 num += utils.MustAtoi(string(line[i])) * 10
64 for key := range digits {
65 if strings.HasPrefix(line[i:], key) {
66 fmt.Println("first digit:", digits[key])
67 num += utils.MustAtoi(digits[key]) * 10
76 reverse := reverseString(line)
78 for i:=0;i<len(reverse);i++ {
79 if reverse[i] >= '0' && reverse[i] <= '9' {
80 fmt.Println("last digit:", string(reverse[i]))
81 num += utils.MustAtoi(string(reverse[i]))
85 for key := range digits_backwards {
86 if strings.HasPrefix(reverse[i:], key) {
87 fmt.Println("last digit:", digits_backwards[key])
88 num += utils.MustAtoi(digits_backwards[key])
100 func reverseString(input string) string {
101 // Convert the string to a rune slice
102 runes := []rune(input)
104 // Get the length of the rune slice
107 // Reverse the order of runes
108 for i, j := 0, length-1; i < j; i, j = i+1, j-1 {
109 runes[i], runes[j] = runes[j], runes[i]
112 // Convert the reversed rune slice back to a string
113 reversedString := string(runes)
115 return reversedString