day10: solve part 1 & 2
This commit is contained in:
parent
48c04f4fa0
commit
ddcb8b25a9
4 changed files with 295 additions and 0 deletions
107
day10/part1/input
Normal file
107
day10/part1/input
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
48
|
||||||
|
171
|
||||||
|
156
|
||||||
|
51
|
||||||
|
26
|
||||||
|
6
|
||||||
|
80
|
||||||
|
62
|
||||||
|
65
|
||||||
|
82
|
||||||
|
130
|
||||||
|
97
|
||||||
|
49
|
||||||
|
31
|
||||||
|
142
|
||||||
|
83
|
||||||
|
75
|
||||||
|
20
|
||||||
|
154
|
||||||
|
119
|
||||||
|
56
|
||||||
|
114
|
||||||
|
92
|
||||||
|
33
|
||||||
|
140
|
||||||
|
74
|
||||||
|
118
|
||||||
|
1
|
||||||
|
96
|
||||||
|
44
|
||||||
|
128
|
||||||
|
134
|
||||||
|
121
|
||||||
|
64
|
||||||
|
158
|
||||||
|
27
|
||||||
|
17
|
||||||
|
101
|
||||||
|
59
|
||||||
|
12
|
||||||
|
89
|
||||||
|
88
|
||||||
|
145
|
||||||
|
167
|
||||||
|
11
|
||||||
|
3
|
||||||
|
39
|
||||||
|
43
|
||||||
|
105
|
||||||
|
16
|
||||||
|
170
|
||||||
|
63
|
||||||
|
111
|
||||||
|
2
|
||||||
|
108
|
||||||
|
21
|
||||||
|
146
|
||||||
|
77
|
||||||
|
45
|
||||||
|
52
|
||||||
|
32
|
||||||
|
127
|
||||||
|
147
|
||||||
|
76
|
||||||
|
58
|
||||||
|
37
|
||||||
|
86
|
||||||
|
129
|
||||||
|
57
|
||||||
|
133
|
||||||
|
120
|
||||||
|
163
|
||||||
|
138
|
||||||
|
161
|
||||||
|
139
|
||||||
|
71
|
||||||
|
9
|
||||||
|
141
|
||||||
|
168
|
||||||
|
164
|
||||||
|
124
|
||||||
|
157
|
||||||
|
95
|
||||||
|
25
|
||||||
|
38
|
||||||
|
69
|
||||||
|
87
|
||||||
|
155
|
||||||
|
135
|
||||||
|
15
|
||||||
|
102
|
||||||
|
70
|
||||||
|
34
|
||||||
|
42
|
||||||
|
24
|
||||||
|
50
|
||||||
|
68
|
||||||
|
169
|
||||||
|
10
|
||||||
|
55
|
||||||
|
117
|
||||||
|
30
|
||||||
|
81
|
||||||
|
151
|
||||||
|
100
|
||||||
|
162
|
||||||
|
148
|
40
day10/part1/main.d
Normal file
40
day10/part1/main.d
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
import std;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
File("input", "r").byLine.map!(to!int)
|
||||||
|
.array.calculateJoltDifferences.multiply1And3Differences.writeln;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto multiply1And3Differences(int[int] differences)
|
||||||
|
{
|
||||||
|
return differences[1] * differences[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
int[int] calculateJoltDifferences(int[] input)
|
||||||
|
{
|
||||||
|
input.sort();
|
||||||
|
|
||||||
|
int[int] differenceCounts;
|
||||||
|
chain([0], input, [input.back + 3]).slide(2).map!(pair => pair[1] - pair[0])
|
||||||
|
.each!(difference => differenceCounts[difference]++);
|
||||||
|
|
||||||
|
return differenceCounts;
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
auto input = [16, 10, 15, 5, 1, 11, 7, 19, 6, 12, 4];
|
||||||
|
auto differences = input.calculateJoltDifferences;
|
||||||
|
assert(differences[1] == 7 && differences[3] == 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
auto input = [
|
||||||
|
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
|
||||||
|
];
|
||||||
|
auto differences = input.calculateJoltDifferences;
|
||||||
|
assert(differences[1] == 22 && differences[3] == 10);
|
||||||
|
}
|
107
day10/part2/input
Normal file
107
day10/part2/input
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
48
|
||||||
|
171
|
||||||
|
156
|
||||||
|
51
|
||||||
|
26
|
||||||
|
6
|
||||||
|
80
|
||||||
|
62
|
||||||
|
65
|
||||||
|
82
|
||||||
|
130
|
||||||
|
97
|
||||||
|
49
|
||||||
|
31
|
||||||
|
142
|
||||||
|
83
|
||||||
|
75
|
||||||
|
20
|
||||||
|
154
|
||||||
|
119
|
||||||
|
56
|
||||||
|
114
|
||||||
|
92
|
||||||
|
33
|
||||||
|
140
|
||||||
|
74
|
||||||
|
118
|
||||||
|
1
|
||||||
|
96
|
||||||
|
44
|
||||||
|
128
|
||||||
|
134
|
||||||
|
121
|
||||||
|
64
|
||||||
|
158
|
||||||
|
27
|
||||||
|
17
|
||||||
|
101
|
||||||
|
59
|
||||||
|
12
|
||||||
|
89
|
||||||
|
88
|
||||||
|
145
|
||||||
|
167
|
||||||
|
11
|
||||||
|
3
|
||||||
|
39
|
||||||
|
43
|
||||||
|
105
|
||||||
|
16
|
||||||
|
170
|
||||||
|
63
|
||||||
|
111
|
||||||
|
2
|
||||||
|
108
|
||||||
|
21
|
||||||
|
146
|
||||||
|
77
|
||||||
|
45
|
||||||
|
52
|
||||||
|
32
|
||||||
|
127
|
||||||
|
147
|
||||||
|
76
|
||||||
|
58
|
||||||
|
37
|
||||||
|
86
|
||||||
|
129
|
||||||
|
57
|
||||||
|
133
|
||||||
|
120
|
||||||
|
163
|
||||||
|
138
|
||||||
|
161
|
||||||
|
139
|
||||||
|
71
|
||||||
|
9
|
||||||
|
141
|
||||||
|
168
|
||||||
|
164
|
||||||
|
124
|
||||||
|
157
|
||||||
|
95
|
||||||
|
25
|
||||||
|
38
|
||||||
|
69
|
||||||
|
87
|
||||||
|
155
|
||||||
|
135
|
||||||
|
15
|
||||||
|
102
|
||||||
|
70
|
||||||
|
34
|
||||||
|
42
|
||||||
|
24
|
||||||
|
50
|
||||||
|
68
|
||||||
|
169
|
||||||
|
10
|
||||||
|
55
|
||||||
|
117
|
||||||
|
30
|
||||||
|
81
|
||||||
|
151
|
||||||
|
100
|
||||||
|
162
|
||||||
|
148
|
41
day10/part2/main.d
Normal file
41
day10/part2/main.d
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
import std;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
auto nodes = File("input", "r").byLine.map!(to!int).chain([0])
|
||||||
|
.map!(it => tuple(it, cast(void[0])[])).assocArray;
|
||||||
|
nodes.calculateNumberOfPathsLeadingFromTo(0, nodes.byKey.maxElement).writeln;
|
||||||
|
}
|
||||||
|
|
||||||
|
ulong calculateNumberOfPathsLeadingFromTo(void[0][int] nodes, int start, int end)
|
||||||
|
{
|
||||||
|
if (end == start)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return iota(end - 3, end).filter!(potentialAncestor => potentialAncestor in nodes)
|
||||||
|
.map!(ancestor => nodes.memoize!calculateNumberOfPathsLeadingFromTo(start, ancestor))
|
||||||
|
.sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
void[0][int] input = [0 : [], 1 : []];
|
||||||
|
assert(input.calculateNumberOfPathsLeadingFromTo(0, 1) == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
auto input = [16, 10, 15, 5, 1, 11, 7, 19, 6, 12, 4].chain([0])
|
||||||
|
.map!(it => tuple(it, cast(void[0])[])).assocArray;
|
||||||
|
assert(input.calculateNumberOfPathsLeadingFromTo(0, input.byKey.maxElement) == 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
auto input = [
|
||||||
|
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
|
||||||
|
].chain([0]).map!(it => tuple(it, cast(void[0])[])).assocArray;
|
||||||
|
assert(input.calculateNumberOfPathsLeadingFromTo(0, input.byKey.maxElement) == 19_208);
|
||||||
|
}
|
Loading…
Reference in a new issue