day10
This commit is contained in:
parent
be899a9b97
commit
ecc548a987
104
data/day10/input
Normal file
104
data/day10/input
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
79
|
||||||
|
142
|
||||||
|
139
|
||||||
|
33
|
||||||
|
56
|
||||||
|
133
|
||||||
|
138
|
||||||
|
61
|
||||||
|
125
|
||||||
|
88
|
||||||
|
158
|
||||||
|
123
|
||||||
|
65
|
||||||
|
69
|
||||||
|
105
|
||||||
|
6
|
||||||
|
81
|
||||||
|
31
|
||||||
|
60
|
||||||
|
70
|
||||||
|
159
|
||||||
|
114
|
||||||
|
71
|
||||||
|
15
|
||||||
|
13
|
||||||
|
72
|
||||||
|
118
|
||||||
|
14
|
||||||
|
9
|
||||||
|
93
|
||||||
|
162
|
||||||
|
140
|
||||||
|
165
|
||||||
|
1
|
||||||
|
80
|
||||||
|
148
|
||||||
|
32
|
||||||
|
53
|
||||||
|
102
|
||||||
|
5
|
||||||
|
68
|
||||||
|
101
|
||||||
|
111
|
||||||
|
85
|
||||||
|
45
|
||||||
|
25
|
||||||
|
16
|
||||||
|
59
|
||||||
|
131
|
||||||
|
23
|
||||||
|
91
|
||||||
|
92
|
||||||
|
115
|
||||||
|
103
|
||||||
|
166
|
||||||
|
22
|
||||||
|
145
|
||||||
|
161
|
||||||
|
108
|
||||||
|
155
|
||||||
|
135
|
||||||
|
55
|
||||||
|
86
|
||||||
|
34
|
||||||
|
37
|
||||||
|
78
|
||||||
|
28
|
||||||
|
75
|
||||||
|
7
|
||||||
|
104
|
||||||
|
121
|
||||||
|
24
|
||||||
|
153
|
||||||
|
167
|
||||||
|
95
|
||||||
|
87
|
||||||
|
94
|
||||||
|
134
|
||||||
|
154
|
||||||
|
84
|
||||||
|
151
|
||||||
|
124
|
||||||
|
62
|
||||||
|
49
|
||||||
|
38
|
||||||
|
39
|
||||||
|
54
|
||||||
|
109
|
||||||
|
128
|
||||||
|
19
|
||||||
|
2
|
||||||
|
98
|
||||||
|
122
|
||||||
|
132
|
||||||
|
141
|
||||||
|
168
|
||||||
|
8
|
||||||
|
160
|
||||||
|
50
|
||||||
|
42
|
||||||
|
46
|
||||||
|
110
|
||||||
|
12
|
||||||
|
152
|
39
src/bin/day10.rs
Normal file
39
src/bin/day10.rs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
const INPUT: &str = include_str!("../../data/day10/input");
|
||||||
|
|
||||||
|
fn calc(input: &[u32], cache: &mut [Option<u64>], ndx: usize) -> u64 {
|
||||||
|
if let Some(n) = cache[ndx] {
|
||||||
|
n
|
||||||
|
} else {
|
||||||
|
let cur = input[ndx];
|
||||||
|
let mut n = 0;
|
||||||
|
for next in ndx+1..input.len() {
|
||||||
|
if input[next] - cur > 3 { break; }
|
||||||
|
n += calc(input, cache, next);
|
||||||
|
}
|
||||||
|
cache[ndx] = Some(n);
|
||||||
|
n
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut input: Vec<u32> = INPUT.lines().map(|s| s.parse().unwrap()).collect();
|
||||||
|
input.sort();
|
||||||
|
|
||||||
|
let mut prev = 0;
|
||||||
|
let mut count = [0, 0, 0];
|
||||||
|
{
|
||||||
|
for &j in &input {
|
||||||
|
count[(j - prev - 1) as usize] += 1;
|
||||||
|
prev = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count[2] += 1; // device always has diff of 3.
|
||||||
|
println!("#(joltage diff 1) * #(joltage diff 3): {}", count[2] * count[0]);
|
||||||
|
|
||||||
|
// insert outlet as first element
|
||||||
|
input.insert(0, 0);
|
||||||
|
let mut cache: Vec<Option<u64>> = input.iter().map(|_| None).collect();
|
||||||
|
cache[input.len()-1] = Some(1); // always need last adapter
|
||||||
|
|
||||||
|
println!("Combinations: {}", calc(&input, &mut cache, 0));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user