Day 10 possibly complete
but way to resource intensive
This commit is contained in:
parent
655fafd37f
commit
9f412dbd29
97
2020/day10/input
Normal file
97
2020/day10/input
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
8
|
||||||
|
131
|
||||||
|
91
|
||||||
|
35
|
||||||
|
47
|
||||||
|
116
|
||||||
|
105
|
||||||
|
121
|
||||||
|
56
|
||||||
|
62
|
||||||
|
94
|
||||||
|
72
|
||||||
|
13
|
||||||
|
82
|
||||||
|
156
|
||||||
|
102
|
||||||
|
12
|
||||||
|
59
|
||||||
|
31
|
||||||
|
138
|
||||||
|
46
|
||||||
|
120
|
||||||
|
7
|
||||||
|
127
|
||||||
|
126
|
||||||
|
111
|
||||||
|
2
|
||||||
|
123
|
||||||
|
22
|
||||||
|
69
|
||||||
|
18
|
||||||
|
157
|
||||||
|
75
|
||||||
|
149
|
||||||
|
88
|
||||||
|
81
|
||||||
|
23
|
||||||
|
98
|
||||||
|
132
|
||||||
|
1
|
||||||
|
63
|
||||||
|
142
|
||||||
|
37
|
||||||
|
133
|
||||||
|
61
|
||||||
|
112
|
||||||
|
122
|
||||||
|
128
|
||||||
|
155
|
||||||
|
145
|
||||||
|
139
|
||||||
|
66
|
||||||
|
42
|
||||||
|
134
|
||||||
|
24
|
||||||
|
60
|
||||||
|
9
|
||||||
|
28
|
||||||
|
17
|
||||||
|
29
|
||||||
|
101
|
||||||
|
148
|
||||||
|
96
|
||||||
|
68
|
||||||
|
25
|
||||||
|
19
|
||||||
|
6
|
||||||
|
67
|
||||||
|
113
|
||||||
|
55
|
||||||
|
40
|
||||||
|
135
|
||||||
|
97
|
||||||
|
79
|
||||||
|
48
|
||||||
|
159
|
||||||
|
14
|
||||||
|
43
|
||||||
|
86
|
||||||
|
36
|
||||||
|
41
|
||||||
|
85
|
||||||
|
87
|
||||||
|
119
|
||||||
|
30
|
||||||
|
108
|
||||||
|
80
|
||||||
|
152
|
||||||
|
158
|
||||||
|
151
|
||||||
|
32
|
||||||
|
78
|
||||||
|
150
|
||||||
|
95
|
||||||
|
3
|
||||||
|
52
|
||||||
|
49
|
117
2020/day10/main.go
Normal file
117
2020/day10/main.go
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("# Day 10")
|
||||||
|
inp := h.StdinToIntSlice()
|
||||||
|
sort.Ints(inp)
|
||||||
|
jumps := part1(inp)
|
||||||
|
fmt.Println("## Part 1")
|
||||||
|
fmt.Println(jumps[1] * jumps[3])
|
||||||
|
|
||||||
|
fmt.Println("## Part 2")
|
||||||
|
fmt.Println(part2(inp))
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(inp []int) map[int]int {
|
||||||
|
jumps := make(map[int]int)
|
||||||
|
var curr int
|
||||||
|
var used []int
|
||||||
|
wrk := make([]int, len(inp))
|
||||||
|
copy(wrk, inp)
|
||||||
|
for len(used) < len(inp) {
|
||||||
|
var next int
|
||||||
|
for i := range wrk {
|
||||||
|
if i == 0 {
|
||||||
|
next = wrk[i]
|
||||||
|
} else {
|
||||||
|
diff := wrk[i] - curr
|
||||||
|
if diff > 0 && diff < next-curr {
|
||||||
|
next = wrk[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jumps[next-curr]++
|
||||||
|
curr = next
|
||||||
|
used = append(used, curr)
|
||||||
|
var nextList []int
|
||||||
|
for i := range wrk {
|
||||||
|
if wrk[i] != curr {
|
||||||
|
nextList = append(nextList, wrk[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wrk = make([]int, len(nextList))
|
||||||
|
copy(wrk, nextList)
|
||||||
|
}
|
||||||
|
jumps[3]++
|
||||||
|
return jumps
|
||||||
|
}
|
||||||
|
|
||||||
|
var prevs map[int][]int
|
||||||
|
var psbs map[int][][]int
|
||||||
|
|
||||||
|
func part2(inp []int) int {
|
||||||
|
psbs = make(map[int][][]int)
|
||||||
|
psbs[0] = [][]int{{0}}
|
||||||
|
prevs = make(map[int][]int)
|
||||||
|
var phone int
|
||||||
|
for i := range inp {
|
||||||
|
if inp[i] > phone {
|
||||||
|
phone = inp[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Add the outlet
|
||||||
|
inp = append(inp, 0)
|
||||||
|
// Add the phone
|
||||||
|
phone = phone + 3
|
||||||
|
inp = append(inp, phone)
|
||||||
|
for i := range inp {
|
||||||
|
prevs[inp[i]] = findPrevPoss(inp[i], inp)
|
||||||
|
}
|
||||||
|
|
||||||
|
total := len(findConfigs(phone))
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|
||||||
|
func findConfigs(curr int) [][]int {
|
||||||
|
if p, ok := psbs[curr]; ok {
|
||||||
|
return p
|
||||||
|
} else {
|
||||||
|
var ret [][]int
|
||||||
|
for _, v := range prevs[curr] {
|
||||||
|
rec := findConfigs(v)
|
||||||
|
if len(rec) > 0 {
|
||||||
|
for _, rv := range rec {
|
||||||
|
ret = append(ret, append([]int{curr}, rv...))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = [][]int{{curr}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psbs[curr] = ret
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the options immediately preceeding curr
|
||||||
|
func findPrevPoss(curr int, inp []int) []int {
|
||||||
|
if curr == 0 {
|
||||||
|
return []int{}
|
||||||
|
}
|
||||||
|
var next []int
|
||||||
|
for i := range inp {
|
||||||
|
if inp[i] >= curr {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if curr-inp[i] <= 3 {
|
||||||
|
next = append(next, inp[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return next
|
||||||
|
}
|
40
2020/day10/out
Normal file
40
2020/day10/out
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Day 10
|
||||||
|
## Part 1
|
||||||
|
35
|
||||||
|
## Part 2
|
||||||
|
22 Finding configs
|
||||||
|
22 Digging
|
||||||
|
19 Finding configs
|
||||||
|
19 Digging
|
||||||
|
16 Finding configs
|
||||||
|
16 Digging
|
||||||
|
15 Finding configs
|
||||||
|
15 Digging
|
||||||
|
12 Finding configs
|
||||||
|
12 Digging
|
||||||
|
10 Finding configs
|
||||||
|
10 Digging
|
||||||
|
7 Finding configs
|
||||||
|
7 Digging
|
||||||
|
4 Finding configs
|
||||||
|
4 Digging
|
||||||
|
1 Finding configs
|
||||||
|
1 Digging
|
||||||
|
0 Finding configs
|
||||||
|
0 Already known []
|
||||||
|
5 Finding configs
|
||||||
|
5 Digging
|
||||||
|
4 Finding configs
|
||||||
|
4 Already known [[4 1]]
|
||||||
|
6 Finding configs
|
||||||
|
6 Digging
|
||||||
|
4 Finding configs
|
||||||
|
4 Already known [[4 1]]
|
||||||
|
5 Finding configs
|
||||||
|
5 Already known [[5 4 1]]
|
||||||
|
11 Finding configs
|
||||||
|
11 Digging
|
||||||
|
10 Finding configs
|
||||||
|
10 Already known [[10 7 4 1] [10 7 5 4 1] [10 7 6 4 1] [10 7 6 5 4 1]]
|
||||||
|
map[0:[] 1:[[1]] 4:[[4 1]] 5:[[5 4 1]] 6:[[6 4 1] [6 5 4 1]] 7:[[7 4 1] [7 5 4 1] [7 6 4 1] [7 6 5 4 1]] 10:[[10 7 4 1] [10 7 5 4 1] [10 7 6 4 1] [10 7 6 5 4 1]] 11:[[11 10 7 4 1] [11 10 7 5 4 1] [11 10 7 6 4 1] [11 10 7 6 5 4 1]] 12:[[12 10 7 4 1] [12 10 7 5 4 1] [12 10 7 6 4 1] [12 10 7 6 5 4 1] [12 11 10 7 4 1] [12 11 10 7 5 4 1] [12 11 10 7 6 4 1] [12 11 10 7 6 5 4 1]] 15:[[15 12 10 7 4 1] [15 12 10 7 5 4 1] [15 12 10 7 6 4 1] [15 12 10 7 6 5 4 1] [15 12 11 10 7 4 1] [15 12 11 10 7 5 4 1] [15 12 11 10 7 6 4 1] [15 12 11 10 7 6 5 4 1]] 16:[[16 15 12 10 7 4 1] [16 15 12 10 7 5 4 1] [16 15 12 10 7 6 4 1] [16 15 12 10 7 6 5 4 1] [16 15 12 11 10 7 4 1] [16 15 12 11 10 7 5 4 1] [16 15 12 11 10 7 6 4 1] [16 15 12 11 10 7 6 5 4 1]] 19:[[19 16 15 12 10 7 4 1] [19 16 15 12 10 7 5 4 1] [19 16 15 12 10 7 6 4 1] [19 16 15 12 10 7 6 5 4 1] [19 16 15 12 11 10 7 4 1] [19 16 15 12 11 10 7 5 4 1] [19 16 15 12 11 10 7 6 4 1] [19 16 15 12 11 10 7 6 5 4 1]] 22:[[22 19 16 15 12 10 7 4 1] [22 19 16 15 12 10 7 5 4 1] [22 19 16 15 12 10 7 6 4 1] [22 19 16 15 12 10 7 6 5 4 1] [22 19 16 15 12 11 10 7 4 1] [22 19 16 15 12 11 10 7 5 4 1] [22 19 16 15 12 11 10 7 6 4 1] [22 19 16 15 12 11 10 7 6 5 4 1]]]
|
||||||
|
8
|
11
2020/day10/testinput
Normal file
11
2020/day10/testinput
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
16
|
||||||
|
10
|
||||||
|
15
|
||||||
|
5
|
||||||
|
1
|
||||||
|
11
|
||||||
|
7
|
||||||
|
19
|
||||||
|
6
|
||||||
|
12
|
||||||
|
4
|
31
2020/day10/testinput2
Normal file
31
2020/day10/testinput2
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
28
|
||||||
|
33
|
||||||
|
18
|
||||||
|
42
|
||||||
|
31
|
||||||
|
14
|
||||||
|
46
|
||||||
|
20
|
||||||
|
48
|
||||||
|
47
|
||||||
|
24
|
||||||
|
23
|
||||||
|
49
|
||||||
|
45
|
||||||
|
19
|
||||||
|
38
|
||||||
|
39
|
||||||
|
11
|
||||||
|
1
|
||||||
|
32
|
||||||
|
25
|
||||||
|
35
|
||||||
|
8
|
||||||
|
17
|
||||||
|
7
|
||||||
|
9
|
||||||
|
4
|
||||||
|
2
|
||||||
|
34
|
||||||
|
10
|
||||||
|
3
|
Loading…
Reference in New Issue
Block a user