master
1package solutions
2
3import (
4 //"advent2023/internal/aoc"
5 "log"
6 "strconv"
7 "strings"
8)
9
10func Day1Part1(input []string) (solution int) {
11 sum := 0
12 for _, line := range input {
13 first := ""
14 last := ""
15 for _, c := range line {
16 if _, err := strconv.Atoi(string(c)); err == nil {
17 if first == "" {
18 first = string(c)
19 }
20 last = string(c)
21 }
22 }
23 value, err := strconv.Atoi(strings.Join([]string{first, last}, ""))
24 if err != nil {
25 log.Fatal(err)
26 }
27 sum = sum + value
28 }
29 return sum
30}
31
32var digits map[string]string = map[string]string{
33 "one": "1",
34 "1": "1",
35 "two": "2",
36 "2": "2",
37 "three": "3",
38 "3": "3",
39 "four": "4",
40 "4": "4",
41 "five": "5",
42 "5": "5",
43 "six": "6",
44 "6": "6",
45 "seven": "7",
46 "7": "7",
47 "eight": "8",
48 "8": "8",
49 "nine": "9",
50 "9": "9",
51}
52
53type digitIndex struct {
54 digit string
55 index int
56}
57
58func Day1Part2(input []string) (solution int) {
59 sum := 0
60 for _, line := range input {
61 first := digitIndex{digit: "", index: 5000}
62 last := digitIndex{digit: "", index: -1}
63 for k := range digits {
64 f := strings.Index(line, k)
65 if f != -1 && f < first.index {
66 first = digitIndex{digit: k, index: f}
67 }
68 l := strings.LastIndex(line, k)
69 if l != -1 && l > last.index {
70 last = digitIndex{digit: k, index: l}
71 }
72 }
73 joinedDigits := strings.Join([]string{digits[first.digit], digits[last.digit]}, "")
74 value, _ := strconv.Atoi(joinedDigits)
75 sum = sum + value
76 }
77 return sum
78}