Skip to content

Commit 7efa51c

Browse files
committed
2024, day 5
1 parent 8f1dcf0 commit 7efa51c

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-0
lines changed

2024/5/Makefile

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
input:
2+
http "https://adventofcode.com/2024/day/5/input" "Cookie:session=${AOC_SESSION};" >input
3+
4+
main1:
5+
go build -o main1 main1.go
6+
7+
main2:
8+
go build -o main2 main2.go
9+
10+
.PHONY: run1 run2 clean
11+
12+
run1: main1 input
13+
./main1 <input
14+
15+
run2: main2 input
16+
./main2 <input
17+
18+
clean:
19+
rm -f main1 main2 input
20+

2024/5/common.go

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"os"
6+
"strings"
7+
8+
"github.com/lucianoq/container/set"
9+
)
10+
11+
func parseInput() ([][]string, func(a, b string) int) {
12+
scanner := bufio.NewScanner(os.Stdin)
13+
14+
lessThan := map[string]set.Set[string]{}
15+
16+
for scanner.Scan() {
17+
line := scanner.Text()
18+
if line == "" {
19+
break
20+
}
21+
ff := strings.Split(line, "|")
22+
if lessThan[ff[0]] == nil {
23+
lessThan[ff[0]] = set.New[string]()
24+
}
25+
lessThan[ff[0]].Add(ff[1])
26+
}
27+
28+
updates := [][]string{}
29+
for scanner.Scan() {
30+
updates = append(updates, strings.Split(scanner.Text(), ","))
31+
}
32+
33+
// slices.SortFunc
34+
cmpFn := func(a, b string) int {
35+
if lessThan[a].Contains(b) {
36+
return -1
37+
}
38+
if lessThan[b].Contains(b) {
39+
return 1
40+
}
41+
// 0 doesn't necessarily mean they're equal, but
42+
// as slices.SortFunc documentation says:
43+
// | The function should return 0 for incomparable items.
44+
return 0
45+
}
46+
47+
return updates, cmpFn
48+
}

2024/5/main1.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"slices"
6+
"strconv"
7+
)
8+
9+
func main() {
10+
updates, cmpFn := parseInput()
11+
12+
sum := 0
13+
for _, u := range updates {
14+
if slices.IsSortedFunc(u, cmpFn) {
15+
n, _ := strconv.Atoi(u[len(u)/2])
16+
sum += n
17+
}
18+
}
19+
20+
fmt.Println(sum)
21+
}

2024/5/main2.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"slices"
6+
"strconv"
7+
)
8+
9+
func main() {
10+
updates, cmpFn := parseInput()
11+
12+
sum := 0
13+
for _, u := range updates {
14+
if !slices.IsSortedFunc(u, cmpFn) {
15+
slices.SortFunc(u, cmpFn)
16+
n, _ := strconv.Atoi(u[len(u)/2])
17+
sum += n
18+
}
19+
}
20+
21+
fmt.Println(sum)
22+
}

0 commit comments

Comments
 (0)