Skip to content

Commit 570bc7d

Browse files
committed
refactor: 2024 day 1
1 parent 9949664 commit 570bc7d

File tree

1 file changed

+35
-58
lines changed

1 file changed

+35
-58
lines changed

src/2024/day01/go/main.go

+35-58
Original file line numberDiff line numberDiff line change
@@ -11,75 +11,58 @@ import (
1111
"strings"
1212
)
1313

14-
func calculateDistances(input *os.File) (int, error) {
14+
type NumberPairs struct {
15+
a []int
16+
b []int
17+
}
18+
19+
func readAndSortNumbers(input *os.File) NumberPairs {
1520
scanner := bufio.NewScanner(input)
16-
sum := 0
17-
a := make([]int, 0)
18-
b := make([]int, 0)
21+
pairs := NumberPairs{
22+
a: make([]int, 0),
23+
b: make([]int, 0),
24+
}
25+
1926
for scanner.Scan() {
20-
line := scanner.Text()
21-
first := strings.Split(line, " ")[0]
22-
firstN, err := strconv.Atoi(first)
27+
numbers := strings.Split(scanner.Text(), " ")
28+
firstN, err := strconv.Atoi(numbers[0])
2329
if err != nil {
2430
log.Fatal(err)
2531
}
26-
second := strings.Split(line, " ")[1]
27-
secondN, err := strconv.Atoi(second)
32+
secondN, err := strconv.Atoi(numbers[1])
2833
if err != nil {
2934
log.Fatal(err)
3035
}
31-
a = append(a, firstN)
32-
b = append(b, secondN)
36+
pairs.a = append(pairs.a, firstN)
37+
pairs.b = append(pairs.b, secondN)
3338
}
34-
sort.Slice(a, func(i, j int) bool {
35-
return a[i] < a[j]
36-
})
37-
sort.Slice(b, func(i, j int) bool {
38-
return b[i] < b[j]
39-
})
40-
for i := 0; i < len(a); i++ {
41-
diff := math.Abs(float64(a[i] - b[i]))
39+
40+
sort.Ints(pairs.a)
41+
sort.Ints(pairs.b)
42+
return pairs
43+
}
44+
45+
func calculateDistances(pairs NumberPairs) int {
46+
sum := 0
47+
for i := 0; i < len(pairs.a); i++ {
48+
diff := math.Abs(float64(pairs.a[i] - pairs.b[i]))
4249
sum += int(diff)
4350
}
44-
return sum, nil
51+
return sum
4552
}
4653

47-
func similarityScore(input *os.File) (int, error) {
48-
scanner := bufio.NewScanner(input)
54+
func similarityScore(pairs NumberPairs) int {
4955
sum := 0
50-
a := make([]int, 0)
51-
b := make([]int, 0)
52-
for scanner.Scan() {
53-
line := scanner.Text()
54-
first := strings.Split(line, " ")[0]
55-
firstN, err := strconv.Atoi(first)
56-
if err != nil {
57-
log.Fatal(err)
58-
}
59-
second := strings.Split(line, " ")[1]
60-
secondN, err := strconv.Atoi(second)
61-
if err != nil {
62-
log.Fatal(err)
63-
}
64-
a = append(a, firstN)
65-
b = append(b, secondN)
66-
}
67-
sort.Slice(a, func(i, j int) bool {
68-
return a[i] < a[j]
69-
})
70-
sort.Slice(b, func(i, j int) bool {
71-
return b[i] < b[j]
72-
})
73-
for _, left := range a {
56+
for _, left := range pairs.a {
7457
count := 0
75-
for _, right := range b {
58+
for _, right := range pairs.b {
7659
if left == right {
7760
count++
7861
}
7962
}
8063
sum += left * count
8164
}
82-
return sum, nil
65+
return sum
8366
}
8467

8568
func main() {
@@ -88,15 +71,9 @@ func main() {
8871
log.Fatal(err)
8972
}
9073
defer input.Close()
91-
distances, err := calculateDistances(input)
92-
if err != nil {
93-
log.Fatal(err)
94-
}
95-
input.Seek(0, 0)
96-
similarityScore, err := similarityScore(input)
97-
if err != nil {
98-
log.Fatal(err)
99-
}
74+
pairs := readAndSortNumbers(input)
75+
distances := calculateDistances(pairs)
76+
similarity := similarityScore(pairs)
10077
fmt.Println(distances)
101-
fmt.Println(similarityScore)
78+
fmt.Println(similarity)
10279
}

0 commit comments

Comments
 (0)