Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit 7f48f69

Browse files
committed
Make day 16 part 1 much faster
1 parent 1b970f2 commit 7f48f69

File tree

2 files changed

+23
-20
lines changed

2 files changed

+23
-20
lines changed

solutions/day16/main.go

+20-17
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,24 @@ func loop(
4343
return
4444
}
4545

46-
loop(r.turnClockwise(), i, set)
47-
loop(r.turnCounterClockwise(), i, set)
48-
fwd, err := r.forward(i.m)
46+
newR, err := r.forward(i.m)
4947
if err == nil {
50-
loop(fwd, i, set)
48+
loop(newR, i, set)
49+
}
50+
51+
newR, err = r.turnClockwise().forward(i.m)
52+
if err == nil {
53+
loop(newR, i, set)
54+
}
55+
56+
newR, err = r.turnClockwise().turnClockwise().forward(i.m)
57+
if err == nil {
58+
loop(newR, i, set)
59+
}
60+
61+
newR, err = r.turnCounterClockwise().forward(i.m)
62+
if err == nil {
63+
loop(newR, i, set)
5164
}
5265

5366
return
@@ -57,27 +70,17 @@ func lowestSoFar(
5770
i parsedInput,
5871
set visitedSet,
5972
) int {
60-
lowest := 0
61-
for _, n := range set[i.e.Y][i.e.X] {
62-
if lowest == 0 || n < lowest {
63-
lowest = n
64-
}
65-
}
66-
return lowest
73+
return set[i.e.Y][i.e.X]
6774
}
6875

6976
func initializeVisitedSet(
7077
i parsedInput,
7178
) visitedSet {
7279
set := make(visitedSet)
7380
for y, line := range i.m {
74-
set[y] = make(map[intX]map[intDirection]intScore)
81+
set[y] = make(map[intX]intScore)
7582
for x, _ := range line {
76-
set[y][x] = make(map[intDirection]intScore)
77-
set[y][x][North] = math.MaxInt
78-
set[y][x][South] = math.MaxInt
79-
set[y][x][West] = math.MaxInt
80-
set[y][x][East] = math.MaxInt
83+
set[y][x] = math.MaxInt
8184
}
8285
}
8386
return set

solutions/day16/reindeer.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type intX = int
99
type intY = int
1010
type intDirection = int
1111
type intScore = int
12-
type visitedSet = map[intY]map[intX]map[intDirection]intScore
12+
type visitedSet = map[intY]map[intX]intScore
1313

1414
const (
1515
North = iota
@@ -79,9 +79,9 @@ func (r reindeer) turnCounterClockwise() reindeer {
7979
func (r reindeer) visitAndCheckIfDead(
8080
set visitedSet,
8181
) bool {
82-
v := set[r.p.Y][r.p.X][r.direction]
82+
v := set[r.p.Y][r.p.X]
8383
if v == 0 || r.score < v {
84-
set[r.p.Y][r.p.X][r.direction] = r.score
84+
set[r.p.Y][r.p.X] = r.score
8585
return false
8686
}
8787
return true

0 commit comments

Comments
 (0)