|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "bufio" |
5 | 4 | "fmt"
|
| 5 | + "github.com/gdejong/advent-of-code-2024/internal/input" |
6 | 6 | "github.com/gdejong/advent-of-code-2024/internal/must"
|
7 |
| - "io" |
8 |
| - "os" |
9 | 7 | "slices"
|
10 | 8 | )
|
11 | 9 |
|
12 | 10 | func main() {
|
13 |
| - f := must.NoError(os.Open("cmd/day1/real_input.txt")) |
| 11 | + lines := input.Content("cmd/day1/real_input.txt") |
14 | 12 |
|
15 |
| - part1answer := part1(f) |
16 |
| - fmt.Println(part1answer) |
| 13 | + fmt.Println(part1(lines)) |
17 | 14 |
|
18 |
| - // Reset the file so we can it again for part 2 |
19 |
| - must.NoError(f.Seek(0, io.SeekStart)) |
20 |
| - |
21 |
| - part2answer := part2(f) |
22 |
| - fmt.Println(part2answer) |
| 15 | + fmt.Println(part2(lines)) |
23 | 16 | }
|
24 | 17 |
|
25 |
| -func part2(f *os.File) int { |
26 |
| - s := bufio.NewScanner(f) |
27 |
| - |
| 18 | +func part1(lines []string) int { |
28 | 19 | var leftList []int
|
29 | 20 | var rightList []int
|
30 | 21 |
|
31 |
| - for s.Scan() { |
32 |
| - line := s.Text() |
33 |
| - |
| 22 | + for _, line := range lines { |
34 | 23 | var leftNumber int
|
35 | 24 | var rightNumber int
|
36 | 25 | must.NoError(fmt.Sscanf(line, "%d %d", &leftNumber, &rightNumber))
|
37 | 26 | leftList = append(leftList, leftNumber)
|
38 | 27 | rightList = append(rightList, rightNumber)
|
39 | 28 | }
|
40 | 29 |
|
41 |
| - counterMap := make(map[int]int) |
| 30 | + slices.Sort(leftList) |
| 31 | + slices.Sort(rightList) |
42 | 32 |
|
43 |
| - for _, value := range rightList { |
44 |
| - if _, ok := counterMap[value]; ok { |
45 |
| - counterMap[value]++ |
46 |
| - } else { |
47 |
| - counterMap[value] = 1 |
48 |
| - } |
| 33 | + if len(leftList) != len(rightList) { |
| 34 | + panic("expected same length") |
49 | 35 | }
|
50 | 36 |
|
51 |
| - similarityScore := 0 |
52 |
| - for _, value := range leftList { |
53 |
| - counterMapValue, ok := counterMap[value] |
54 |
| - if !ok { |
55 |
| - continue |
| 37 | + distanceSum := 0 |
| 38 | + for i := 0; i < len(leftList); i++ { |
| 39 | + distance := leftList[i] - rightList[i] |
| 40 | + |
| 41 | + // Take the absolute value |
| 42 | + if distance < 0 { |
| 43 | + distance = distance * -1 |
56 | 44 | }
|
57 | 45 |
|
58 |
| - similarityScore += value * counterMapValue |
| 46 | + distanceSum += distance |
59 | 47 | }
|
60 | 48 |
|
61 |
| - return similarityScore |
| 49 | + return distanceSum |
62 | 50 | }
|
63 | 51 |
|
64 |
| -func part1(f *os.File) int { |
65 |
| - s := bufio.NewScanner(f) |
66 |
| - |
| 52 | +func part2(lines []string) int { |
67 | 53 | var leftList []int
|
68 | 54 | var rightList []int
|
69 | 55 |
|
70 |
| - for s.Scan() { |
71 |
| - line := s.Text() |
72 |
| - |
| 56 | + for _, line := range lines { |
73 | 57 | var leftNumber int
|
74 | 58 | var rightNumber int
|
75 | 59 | must.NoError(fmt.Sscanf(line, "%d %d", &leftNumber, &rightNumber))
|
76 | 60 | leftList = append(leftList, leftNumber)
|
77 | 61 | rightList = append(rightList, rightNumber)
|
78 | 62 | }
|
79 | 63 |
|
80 |
| - slices.Sort(leftList) |
81 |
| - slices.Sort(rightList) |
| 64 | + counterMap := make(map[int]int) |
82 | 65 |
|
83 |
| - if len(leftList) != len(rightList) { |
84 |
| - panic("expected same length") |
| 66 | + for _, value := range rightList { |
| 67 | + if _, ok := counterMap[value]; ok { |
| 68 | + counterMap[value]++ |
| 69 | + } else { |
| 70 | + counterMap[value] = 1 |
| 71 | + } |
85 | 72 | }
|
86 | 73 |
|
87 |
| - distanceSum := 0 |
88 |
| - for i := 0; i < len(leftList); i++ { |
89 |
| - distance := leftList[i] - rightList[i] |
90 |
| - |
91 |
| - // Take the absolute value |
92 |
| - if distance < 0 { |
93 |
| - distance = distance * -1 |
| 74 | + similarityScore := 0 |
| 75 | + for _, value := range leftList { |
| 76 | + counterMapValue, ok := counterMap[value] |
| 77 | + if !ok { |
| 78 | + continue |
94 | 79 | }
|
95 | 80 |
|
96 |
| - distanceSum += distance |
| 81 | + similarityScore += value * counterMapValue |
97 | 82 | }
|
98 | 83 |
|
99 |
| - return distanceSum |
| 84 | + return similarityScore |
100 | 85 | }
|
0 commit comments