Skip to content

Commit d03bf5e

Browse files
committed
chore(aoc-2024): day 01 part 1
Signed-off-by: Márk Kővári <kovarimarkofficial@gmail.com>
1 parent 8dd7dac commit d03bf5e

5 files changed

Lines changed: 1097 additions & 0 deletions

File tree

2024/cmd/01.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package main
2+
3+
import (
4+
"math"
5+
"os"
6+
"slices"
7+
"strconv"
8+
"strings"
9+
)
10+
11+
func readFile(path string) ([]int64, []int64, error) {
12+
dat, err := os.ReadFile(path)
13+
if err != nil {
14+
return nil, nil, err
15+
}
16+
lines := strings.Split(string(dat), "\n")
17+
left := make([]int64, 0)
18+
right := make([]int64, 0)
19+
for _, line := range lines {
20+
if line == "" {
21+
continue
22+
}
23+
parts := strings.Fields(line)
24+
leftAsNumber, err := strconv.ParseInt(parts[0], 10, 64)
25+
if err != nil {
26+
continue
27+
}
28+
rightAsNumber, err := strconv.ParseInt(parts[1], 10, 64)
29+
if err != nil {
30+
continue
31+
}
32+
left = append(left, int64(leftAsNumber))
33+
right = append(right, int64(rightAsNumber))
34+
}
35+
return left, right, nil
36+
}
37+
38+
func sortInput(left, right []int64) ([]int64, []int64) {
39+
slices.Sort(left)
40+
slices.Sort(right)
41+
return left, right
42+
}
43+
44+
func getDisances(left, right []int64) []int64 {
45+
distances := make([]int64, 0)
46+
for i := 0; i < len(left); i++ {
47+
d := int64(math.Abs(float64(right[i] - left[i])))
48+
distances = append(distances, d)
49+
}
50+
return distances
51+
}
52+
53+
func sumDistances(distances []int64) int {
54+
var sum int
55+
for _, distance := range distances {
56+
sum += int(distance)
57+
}
58+
return sum
59+
}

2024/cmd/01_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
import "testing"
4+
5+
func TestExample(t *testing.T) {
6+
left, right, err := readFile("../data/01/example")
7+
if err != nil {
8+
t.Fatalf("Error reading file: %v", err)
9+
}
10+
left, right = sortInput(left, right)
11+
distances := getDisances(left, right)
12+
distanceSum := sumDistances(distances)
13+
if distanceSum != 11 {
14+
t.Fatalf("Expected 11, got %d", distanceSum)
15+
}
16+
}
17+
18+
func TestInput(t *testing.T) {
19+
left, right, err := readFile("../data/01/input")
20+
if err != nil {
21+
t.Fatalf("Error reading file: %v", err)
22+
}
23+
left, right = sortInput(left, right)
24+
distances := getDisances(left, right)
25+
distanceSum := sumDistances(distances)
26+
if distanceSum != 1970720 {
27+
t.Fatalf("Expected 1970720, got %d", distanceSum)
28+
}
29+
}

2024/data/01/example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
3 4
2+
4 3
3+
2 5
4+
1 3
5+
3 9
6+
3 3

0 commit comments

Comments
 (0)