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

Lines changed: 20 additions & 17 deletions
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

Lines changed: 3 additions & 3 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy