Skip to content

Commit 5ae5e33

Browse files
committed
more Go solutions
1 parent a04a10d commit 5ae5e33

File tree

14 files changed

+1991
-29
lines changed

14 files changed

+1991
-29
lines changed

README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@ Puzzle | Stars |
1717
[Day 1: Historian Hysteria](https://adventofcode.com/2024/day/1) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day1/day1.rs) [![Python](./scripts/assets/python.png)](src/year2024/day1/day1.py) [![C](./scripts/assets/c.png)](src/year2024/day1/day1.c) [![C++](./scripts/assets/cpp.png)](src/year2024/day1/day1.cpp) [![Go](./scripts/assets/go.png)](src/year2024/day1/day1.go) [![Ruby](./scripts/assets/ruby.png)](src/year2024/day1/day1.rb) [![Perl](./scripts/assets/perl.png)](src/year2024/day1/day1.pl) [![Lua](./scripts/assets/lua.png)](src/year2024/day1/day1.lua) [![JS](./scripts/assets/javascript.png)](src/year2024/day1/day1.js) [![Bash](./scripts/assets/bash.png)](src/year2024/day1/day1.sh) [![Swift](./scripts/assets/swift.png)](src/year2024/day1/day1.swift) [![Java](./scripts/assets/java.png)](src/year2024/day1/day1.java) [![C#](./scripts/assets/csharp.png)](src/year2024/day1/day1.cs) [![SQLite](./scripts/assets/sqlite.png)](src/year2024/day1/day1.sql)
1818
[Day 2: Red-Nosed Reports](https://adventofcode.com/2024/day/2) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day2/day2.rs) [![Python](./scripts/assets/python.png)](src/year2024/day2/day2.py) [![Go](./scripts/assets/go.png)](src/year2024/day2/day2.go)
1919
[Day 3: Mull It Over](https://adventofcode.com/2024/day/3) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day3/day3.rs) [![Python](./scripts/assets/python.png)](src/year2024/day3/day3.py) [![Go](./scripts/assets/go.png)](src/year2024/day3/day3.go) [![Perl](./scripts/assets/perl.png)](src/year2024/day3/day3.pl)
20-
[Day 4: Ceres Search](https://adventofcode.com/2024/day/4) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day4/day4.rs) [![Python](./scripts/assets/python.png)](src/year2024/day4/day4.py)
21-
[Day 5: Print Queue](https://adventofcode.com/2024/day/5) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day5/day5.rs)
22-
[Day 6: Guard Gallivant](https://adventofcode.com/2024/day/6) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day6/day6.rs)
20+
[Day 4: Ceres Search](https://adventofcode.com/2024/day/4) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day4/day4.rs) [![Python](./scripts/assets/python.png)](src/year2024/day4/day4.py) [![Go](./scripts/assets/go.png)](src/year2024/day4/day4.go)
21+
[Day 5: Print Queue](https://adventofcode.com/2024/day/5) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day5/day5.rs) [![Go](./scripts/assets/go.png)](src/year2024/day5/day5.go)
22+
[Day 6: Guard Gallivant](https://adventofcode.com/2024/day/6) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day6/day6.rs) [![Go](./scripts/assets/go.png)](src/year2024/day6/day6.go)
2323
[Day 7: Bridge Repair](https://adventofcode.com/2024/day/7) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day7/day7.rs) [![Python](./scripts/assets/python.png)](src/year2024/day7/day7.py) [![Go](./scripts/assets/go.png)](src/year2024/day7/day7.go)
24-
[Day 8: Resonant Collinearity](https://adventofcode.com/2024/day/8) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day8/day8.rs) [![Python](./scripts/assets/python.png)](src/year2024/day8/day8.py)
25-
[Day 9: Disk Fragmenter](https://adventofcode.com/2024/day/9) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day9/day9.rs)
26-
[Day 10: Hoof It](https://adventofcode.com/2024/day/10) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day10/day10.rs)
24+
[Day 8: Resonant Collinearity](https://adventofcode.com/2024/day/8) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day8/day8.rs) [![Python](./scripts/assets/python.png)](src/year2024/day8/day8.py) [![Go](./scripts/assets/go.png)](src/year2024/day8/day8.go)
25+
[Day 9: Disk Fragmenter](https://adventofcode.com/2024/day/9) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day9/day9.rs) [![Go](./scripts/assets/go.png)](src/year2024/day9/day9.go)
26+
[Day 10: Hoof It](https://adventofcode.com/2024/day/10) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day10/day10.rs) [![Go](./scripts/assets/go.png)](src/year2024/day10/day10.go)
2727
[Day 11: Plutonian Pebbles](https://adventofcode.com/2024/day/11) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day11/day11.rs) [![Go](./scripts/assets/go.png)](src/year2024/day11/day11.go)
28-
[Day 12: Garden Groups](https://adventofcode.com/2024/day/12) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day12/day12.rs)
29-
[Day 13: Claw Contraption](https://adventofcode.com/2024/day/13) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day13/day13.rs) [![Rust](./scripts/assets/rust.png)](src/year2024/day13_z3/day13_z3.rs) [![Python](./scripts/assets/python.png)](src/year2024/day13_z3/day13.py)
28+
[Day 12: Garden Groups](https://adventofcode.com/2024/day/12) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day12/day12.rs) [![Go](./scripts/assets/go.png)](src/year2024/day12/day12.go)
29+
[Day 13: Claw Contraption](https://adventofcode.com/2024/day/13) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day13/day13.rs) [![Rust](./scripts/assets/rust.png)](src/year2024/day13_z3/day13_z3.rs) [![Python](./scripts/assets/python.png)](src/year2024/day13_z3/day13.py) [![Go](./scripts/assets/go.png)](src/year2024/day13/day13.go)
3030
[Day 14: Restroom Redoubt](https://adventofcode.com/2024/day/14) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day14/day14.rs) [![Python](./scripts/assets/python.png)](src/year2024/day14/day14.py) [🎁](src/year2024/day14/README.md)
31-
[Day 15: Warehouse Woes](https://adventofcode.com/2024/day/15) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day15/day15.rs) [🎁](src/year2024/day15/README.md)
31+
[Day 15: Warehouse Woes](https://adventofcode.com/2024/day/15) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day15/day15.rs) [![Go](./scripts/assets/go.png)](src/year2024/day15/day15.go) [🎁](src/year2024/day15/README.md)
3232
[Day 16: Reindeer Maze](https://adventofcode.com/2024/day/16) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day16/day16.rs) [🎁](src/year2024/day16/README.md)
3333
[Day 17: Chronospatial Computer](https://adventofcode.com/2024/day/17) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day17/day17.rs)
3434
[Day 18: RAM Run](https://adventofcode.com/2024/day/18) | ⭐⭐ | [![Rust](./scripts/assets/rust.png)](src/year2024/day18/day18.rs) [![C++](./scripts/assets/cpp.png)](src/year2024/day18/day18.cpp) [![Go](./scripts/assets/go.png)](src/year2024/day18/day18.go)

src/year2024/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ Puzzle | Stars |
1212
[Day 1: Historian Hysteria](https://adventofcode.com/2024/day/1) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day1/day1.rs) [![Python](../../scripts/assets/python.png)](day1/day1.py) [![C](../../scripts/assets/c.png)](day1/day1.c) [![C++](../../scripts/assets/cpp.png)](day1/day1.cpp) [![Go](../../scripts/assets/go.png)](day1/day1.go) [![Ruby](../../scripts/assets/ruby.png)](day1/day1.rb) [![Perl](../../scripts/assets/perl.png)](day1/day1.pl) [![Lua](../../scripts/assets/lua.png)](day1/day1.lua) [![JS](../../scripts/assets/javascript.png)](day1/day1.js) [![Bash](../../scripts/assets/bash.png)](day1/day1.sh) [![Swift](../../scripts/assets/swift.png)](day1/day1.swift) [![Java](../../scripts/assets/java.png)](day1/day1.java) [![C#](../../scripts/assets/csharp.png)](day1/day1.cs) [![SQLite](../../scripts/assets/sqlite.png)](day1/day1.sql)
1313
[Day 2: Red-Nosed Reports](https://adventofcode.com/2024/day/2) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day2/day2.rs) [![Python](../../scripts/assets/python.png)](day2/day2.py) [![Go](../../scripts/assets/go.png)](day2/day2.go)
1414
[Day 3: Mull It Over](https://adventofcode.com/2024/day/3) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day3/day3.rs) [![Python](../../scripts/assets/python.png)](day3/day3.py) [![Go](../../scripts/assets/go.png)](day3/day3.go) [![Perl](../../scripts/assets/perl.png)](day3/day3.pl)
15-
[Day 4: Ceres Search](https://adventofcode.com/2024/day/4) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day4/day4.rs) [![Python](../../scripts/assets/python.png)](day4/day4.py)
16-
[Day 5: Print Queue](https://adventofcode.com/2024/day/5) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day5/day5.rs)
17-
[Day 6: Guard Gallivant](https://adventofcode.com/2024/day/6) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day6/day6.rs)
15+
[Day 4: Ceres Search](https://adventofcode.com/2024/day/4) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day4/day4.rs) [![Python](../../scripts/assets/python.png)](day4/day4.py) [![Go](../../scripts/assets/go.png)](day4/day4.go)
16+
[Day 5: Print Queue](https://adventofcode.com/2024/day/5) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day5/day5.rs) [![Go](../../scripts/assets/go.png)](day5/day5.go)
17+
[Day 6: Guard Gallivant](https://adventofcode.com/2024/day/6) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day6/day6.rs) [![Go](../../scripts/assets/go.png)](day6/day6.go)
1818
[Day 7: Bridge Repair](https://adventofcode.com/2024/day/7) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day7/day7.rs) [![Python](../../scripts/assets/python.png)](day7/day7.py) [![Go](../../scripts/assets/go.png)](day7/day7.go)
19-
[Day 8: Resonant Collinearity](https://adventofcode.com/2024/day/8) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day8/day8.rs) [![Python](../../scripts/assets/python.png)](day8/day8.py)
20-
[Day 9: Disk Fragmenter](https://adventofcode.com/2024/day/9) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day9/day9.rs)
21-
[Day 10: Hoof It](https://adventofcode.com/2024/day/10) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day10/day10.rs)
19+
[Day 8: Resonant Collinearity](https://adventofcode.com/2024/day/8) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day8/day8.rs) [![Python](../../scripts/assets/python.png)](day8/day8.py) [![Go](../../scripts/assets/go.png)](day8/day8.go)
20+
[Day 9: Disk Fragmenter](https://adventofcode.com/2024/day/9) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day9/day9.rs) [![Go](../../scripts/assets/go.png)](day9/day9.go)
21+
[Day 10: Hoof It](https://adventofcode.com/2024/day/10) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day10/day10.rs) [![Go](../../scripts/assets/go.png)](day10/day10.go)
2222
[Day 11: Plutonian Pebbles](https://adventofcode.com/2024/day/11) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day11/day11.rs) [![Go](../../scripts/assets/go.png)](day11/day11.go)
23-
[Day 12: Garden Groups](https://adventofcode.com/2024/day/12) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day12/day12.rs)
24-
[Day 13: Claw Contraption](https://adventofcode.com/2024/day/13) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day13/day13.rs) [![Rust](../../scripts/assets/rust.png)](day13_z3/day13_z3.rs) [![Python](../../scripts/assets/python.png)](day13_z3/day13.py)
23+
[Day 12: Garden Groups](https://adventofcode.com/2024/day/12) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day12/day12.rs) [![Go](../../scripts/assets/go.png)](day12/day12.go)
24+
[Day 13: Claw Contraption](https://adventofcode.com/2024/day/13) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day13/day13.rs) [![Rust](../../scripts/assets/rust.png)](day13_z3/day13_z3.rs) [![Python](../../scripts/assets/python.png)](day13_z3/day13.py) [![Go](../../scripts/assets/go.png)](day13/day13.go)
2525
[Day 14: Restroom Redoubt](https://adventofcode.com/2024/day/14) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day14/day14.rs) [![Python](../../scripts/assets/python.png)](day14/day14.py) [🎁](day14/README.md)
26-
[Day 15: Warehouse Woes](https://adventofcode.com/2024/day/15) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day15/day15.rs) [🎁](day15/README.md)
26+
[Day 15: Warehouse Woes](https://adventofcode.com/2024/day/15) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day15/day15.rs) [![Go](../../scripts/assets/go.png)](day15/day15.go) [🎁](day15/README.md)
2727
[Day 16: Reindeer Maze](https://adventofcode.com/2024/day/16) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day16/day16.rs) [🎁](day16/README.md)
2828
[Day 17: Chronospatial Computer](https://adventofcode.com/2024/day/17) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day17/day17.rs)
2929
[Day 18: RAM Run](https://adventofcode.com/2024/day/18) | ⭐⭐ | [![Rust](../../scripts/assets/rust.png)](day18/day18.rs) [![C++](../../scripts/assets/cpp.png)](day18/day18.cpp) [![Go](../../scripts/assets/go.png)](day18/day18.go)

src/year2024/day10/day10.go

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
// [Day 10: Hoof It](https://adventofcode.com/2024/day/10)
2+
3+
package main
4+
5+
import (
6+
"container/list"
7+
"fmt"
8+
"log"
9+
"os"
10+
"strings"
11+
"time"
12+
)
13+
14+
const (
15+
bottom = byte('0')
16+
top = byte('9')
17+
)
18+
19+
// Point represents a 2D coordinate.
20+
type Point struct {
21+
X, Y int
22+
}
23+
24+
type Grid struct {
25+
data []byte
26+
width int
27+
height int
28+
}
29+
30+
func parseGrid(data string) Grid {
31+
lines := strings.Split(strings.TrimSpace(data), "\n")
32+
height := len(lines)
33+
width := len(lines[0])
34+
35+
var gridData []byte
36+
for _, line := range lines {
37+
gridData = append(gridData, []byte(line)...)
38+
}
39+
40+
return Grid{
41+
data: gridData,
42+
width: width,
43+
height: height,
44+
}
45+
}
46+
47+
func (g Grid) get(p Point) byte {
48+
if p.X < 0 || p.X >= g.width || p.Y < 0 || p.Y >= g.height {
49+
return 0
50+
}
51+
return g.data[p.Y*g.width+p.X]
52+
}
53+
54+
func (g Grid) neighbors(p Point) []Point {
55+
var neighbors []Point
56+
if p.Y > 0 {
57+
neighbors = append(neighbors, Point{X: p.X, Y: p.Y - 1}) // North
58+
}
59+
if p.X < g.width-1 {
60+
neighbors = append(neighbors, Point{X: p.X + 1, Y: p.Y}) // East
61+
}
62+
if p.Y < g.height-1 {
63+
neighbors = append(neighbors, Point{X: p.X, Y: p.Y + 1}) // South
64+
}
65+
if p.X > 0 {
66+
neighbors = append(neighbors, Point{X: p.X - 1, Y: p.Y}) // West
67+
}
68+
return neighbors
69+
}
70+
71+
type queueItem struct {
72+
point Point
73+
height byte
74+
}
75+
76+
func (g Grid) bfs(start Point) int {
77+
visited := make(map[Point]bool)
78+
height9 := make(map[Point]bool)
79+
queue := list.New()
80+
81+
queue.PushBack(queueItem{start, bottom})
82+
83+
for queue.Len() > 0 {
84+
front := queue.Front()
85+
queue.Remove(front)
86+
item := front.Value.(queueItem)
87+
88+
xy := item.point
89+
height := item.height
90+
91+
visited[xy] = true
92+
93+
if g.get(xy) == top {
94+
height9[xy] = true
95+
}
96+
97+
for _, neigh := range g.neighbors(xy) {
98+
if g.get(neigh) == height+1 && !visited[neigh] {
99+
queue.PushBack(queueItem{neigh, height + 1})
100+
}
101+
}
102+
}
103+
104+
return len(height9)
105+
}
106+
107+
func (g Grid) dfs(xy Point, height byte) int {
108+
if g.get(xy) == top {
109+
return 1
110+
}
111+
112+
sum := 0
113+
for _, neigh := range g.neighbors(xy) {
114+
if g.get(neigh) == height+1 {
115+
sum += g.dfs(neigh, height+1)
116+
}
117+
}
118+
return sum
119+
}
120+
121+
func part1(data string) int {
122+
grid := parseGrid(data)
123+
sum := 0
124+
125+
for y := 0; y < grid.height; y++ {
126+
for x := 0; x < grid.width; x++ {
127+
p := Point{X: x, Y: y}
128+
if grid.get(p) == bottom {
129+
sum += grid.bfs(p)
130+
}
131+
}
132+
}
133+
134+
return sum
135+
}
136+
137+
func part2(data string) int {
138+
grid := parseGrid(data)
139+
sum := 0
140+
141+
for y := 0; y < grid.height; y++ {
142+
for x := 0; x < grid.width; x++ {
143+
p := Point{X: x, Y: y}
144+
if grid.get(p) == bottom {
145+
sum += grid.dfs(p, bottom)
146+
}
147+
}
148+
}
149+
150+
return sum
151+
}
152+
153+
func solve(data []byte) (int, int) {
154+
input := string(data)
155+
return part1(input), part2(input)
156+
}
157+
158+
func main() {
159+
filename := "input.txt"
160+
elapsed := false
161+
162+
for i := 1; i < len(os.Args); i++ {
163+
arg := os.Args[i]
164+
if arg == "--elapsed" {
165+
elapsed = true
166+
} else if !strings.HasPrefix(arg, "-") {
167+
filename = arg
168+
}
169+
}
170+
171+
data, err := os.ReadFile(filename)
172+
if err != nil {
173+
log.Fatal(err)
174+
}
175+
176+
if elapsed {
177+
start := time.Now()
178+
result1, result2 := solve(data)
179+
duration := time.Since(start)
180+
181+
fmt.Println(result1)
182+
fmt.Println(result2)
183+
fmt.Printf("elapsed: %f ms\n", duration.Seconds()*1000.0)
184+
} else {
185+
result1, result2 := solve(data)
186+
187+
fmt.Println(result1)
188+
fmt.Println(result2)
189+
}
190+
}

src/year2024/day11/day11.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"os"
99
"strconv"
1010
"strings"
11+
"time"
1112
)
1213

1314
// transform applies a the transformation of a stone according to the process of the puzzle statement.
@@ -70,20 +71,36 @@ func solve(data []byte, numBlinks int) int {
7071
return totalStones
7172
}
7273

73-
// main is the entry point of the program.
7474
func main() {
7575
filename := "input.txt"
76-
if len(os.Args) >= 2 {
77-
filename = os.Args[1]
76+
elapsed := false
77+
78+
for i := 1; i < len(os.Args); i++ {
79+
arg := os.Args[i]
80+
if arg == "--elapsed" {
81+
elapsed = true
82+
} else if !strings.HasPrefix(arg, "-") {
83+
filename = arg
84+
}
7885
}
86+
7987
data, err := os.ReadFile(filename)
8088
if err != nil {
8189
log.Fatal(err)
8290
}
8391

84-
// part 1
85-
fmt.Println(solve(data, 25))
92+
if elapsed {
93+
start := time.Now()
94+
result1, result2 := solve(data, 25), solve(data, 75)
95+
duration := time.Since(start)
8696

87-
// part 2
88-
fmt.Println(solve(data, 75))
97+
fmt.Println(result1)
98+
fmt.Println(result2)
99+
fmt.Printf("elapsed: %f ms\n", duration.Seconds()*1000.0)
100+
} else {
101+
result1, result2 := solve(data, 25), solve(data, 75)
102+
103+
fmt.Println(result1)
104+
fmt.Println(result2)
105+
}
89106
}

0 commit comments

Comments
 (0)