Skip to content

Commit c190e6e

Browse files
committed
feat(golang): initialize shared framework and refactor day 1
Created 'aoc-go-common' module for shared Go utilities and runner. Migrated 2024 Day 1 to use this new framework.
1 parent eeab266 commit c190e6e

5 files changed

Lines changed: 1113 additions & 0 deletions

File tree

2024/golang/cmd/day01.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"math"
6+
"sort"
7+
"strconv"
8+
"strings"
9+
10+
"github.com/markkovari/advent_of_code/aoc-go-common"
11+
)
12+
13+
type Day01 struct{}
14+
15+
func (d Day01) Part1(input string) string {
16+
left, right := parse(input)
17+
sort.Slice(left, func(i, j int) bool { return left[i] < left[j] })
18+
sort.Slice(right, func(i, j int) bool { return right[i] < right[j] })
19+
20+
var sum int64
21+
for i := range left {
22+
sum += int64(math.Abs(float64(right[i] - left[i])))
23+
}
24+
return fmt.Sprintf("%d", sum)
25+
}
26+
27+
func (d Day01) Part2(input string) string {
28+
left, right := parse(input)
29+
similarity := make(map[int64]int)
30+
for _, n := range right {
31+
similarity[n]++
32+
}
33+
34+
var sum int64
35+
for _, n := range left {
36+
sum += n * int64(similarity[n])
37+
}
38+
return fmt.Sprintf("%d", sum)
39+
}
40+
41+
func parse(input string) ([]int64, []int64) {
42+
left, right := make([]int64, 0), make([]int64, 0)
43+
for _, line := range strings.Split(input, "\n") {
44+
if line == "" { continue }
45+
parts := strings.Fields(line)
46+
l, _ := strconv.ParseInt(parts[0], 10, 64)
47+
r, _ := strconv.ParseInt(parts[1], 10, 64)
48+
left = append(left, l)
49+
right = append(right, r)
50+
}
51+
return left, right
52+
}
53+
54+
func main() {
55+
common.Run(2024, 1, Day01{})
56+
}

0 commit comments

Comments
 (0)