Skip to content

Commit 6c8c4f7

Browse files
committed
day 10
1 parent fa17d13 commit 6c8c4f7

File tree

3 files changed

+149
-0
lines changed

3 files changed

+149
-0
lines changed

10/input.txt

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
676781023010121078756541010565410126589652103
2+
787692014523134569687238921076321087676543012
3+
896543210674013278798107831089980896567122107
4+
654100134985329143237356540123678925498033498
5+
783210325676438050123445443294541012321044589
6+
694309018984567267034576356789032008769655678
7+
345678567823432178125689219878102109678724369
8+
456969430214563089068701008765210234569013212
9+
327854321005478873879010123674377654354321001
10+
218901232876569912968123294589988912210132432
11+
107650343985567803451054387487676903432101561
12+
210545674783498712589965236596567876543650170
13+
323432185692105605678876145645430967858743289
14+
214981092185434104987986001034321458969801001
15+
105670123076393213098887632125010321578932102
16+
789889874101284332106798540136521230432840013
17+
876776965692379876087034567287650145521051224
18+
965460150789561045696129898398010676670569345
19+
234321041276432038765408765498723487989678496
20+
165432132345987129932317454389654395432310987
21+
074540122187656087801326761230101276211001236
22+
783458043090345196540410890121210989303456545
23+
892169834901210105432589789032367893456327896
24+
701078985810012234501678776543456302587410187
25+
667654856798943107657578905494543211693217896
26+
578983012367874038748765412387687600784506787
27+
457832343455465129889854307898990521099615690
28+
300761567854321012934781212387121434988794321
29+
211650434969482103245690101236012345670188760
30+
672349123478091014132386789845621012873279454
31+
589678012562182365001675632736790123964560303
32+
432547001601276478976543541345887654456781212
33+
321232118762345569885012310212994569323998800
34+
210321129098710378894322343200123478010878901
35+
300410030123601256765011056123430765430765432
36+
321567542034510349810782987001521894321045645
37+
434788601945654878725693965432676541013236012
38+
095699717898783965434344876501987034901107823
39+
187659826500192854303239884567698127872787934
40+
234549834410201601214138793298012016543396543
41+
067812765325360519871025682105623456671230123
42+
154908901876451456789014871234702965580145674
43+
233217010945962359874323960189811874495432985
44+
945606321034876543265221054076320432356781876
45+
876545432321089012100100123165410321065690165

10/main.go

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
// finishes uses the coords as a key, ie "r,c" ex: "1,3". if
11+
func dfs(grid [][]int, r int, c int, prev int, finishes *map[string]bool) {
12+
if r < 0 || r >= len(grid) || c < 0 || c >= len(grid[0]) {
13+
return
14+
}
15+
if grid[r][c] != prev+1 {
16+
return
17+
}
18+
if grid[r][c] == 9 {
19+
coordKey := strconv.Itoa(r) + "," + strconv.Itoa(c)
20+
(*finishes)[coordKey] = true
21+
}
22+
dfs(grid, r-1, c, grid[r][c], finishes)
23+
dfs(grid, r+1, c, grid[r][c], finishes)
24+
dfs(grid, r, c+1, grid[r][c], finishes)
25+
dfs(grid, r, c-1, grid[r][c], finishes)
26+
}
27+
28+
func dfs2(grid [][]int, r int, c int, prev int) int {
29+
if r < 0 || r >= len(grid) || c < 0 || c >= len(grid[0]) {
30+
return 0
31+
}
32+
if grid[r][c] != prev+1 {
33+
return 0
34+
}
35+
if grid[r][c] == 9 {
36+
return 1
37+
}
38+
return dfs2(grid, r-1, c, grid[r][c]) + dfs2(grid, r+1, c, grid[r][c]) + dfs2(grid, r, c+1, grid[r][c]) + dfs2(grid, r, c-1, grid[r][c])
39+
}
40+
41+
func part1() {
42+
//raw, _ := os.ReadFile("test.txt")
43+
raw, _ := os.ReadFile("input.txt")
44+
data := string(raw)
45+
grid := [][]int{}
46+
for _, line := range strings.Split(data, "\n") {
47+
row := []int{}
48+
for _, char := range line {
49+
num, _ := strconv.Atoi(string(char))
50+
row = append(row, num)
51+
}
52+
grid = append(grid, row)
53+
}
54+
55+
tot := 0
56+
for r := range len(grid) {
57+
for c := range len(grid[0]) {
58+
if grid[r][c] == 0 {
59+
finishes := map[string]bool{}
60+
dfs(grid, r, c, -1, &finishes)
61+
tot += len(finishes)
62+
}
63+
}
64+
}
65+
fmt.Println(tot)
66+
}
67+
68+
func part2() {
69+
//raw, _ := os.ReadFile("test.txt")
70+
raw, _ := os.ReadFile("input.txt")
71+
data := string(raw)
72+
grid := [][]int{}
73+
for _, line := range strings.Split(data, "\n") {
74+
row := []int{}
75+
for _, char := range line {
76+
num, _ := strconv.Atoi(string(char))
77+
row = append(row, num)
78+
}
79+
grid = append(grid, row)
80+
}
81+
82+
tot := 0
83+
for r := range len(grid) {
84+
for c := range len(grid[0]) {
85+
if grid[r][c] == 0 {
86+
tot += dfs2(grid, r, c, -1)
87+
}
88+
}
89+
}
90+
fmt.Println(tot)
91+
}
92+
93+
func main() {
94+
part1()
95+
part2()
96+
}

10/test.txt

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
89010123
2+
78121874
3+
87430965
4+
96549874
5+
45678903
6+
32019012
7+
01329801
8+
10456732

0 commit comments

Comments
 (0)