Added day 10
This commit is contained in:
parent
357402df00
commit
f057a94b2c
|
@ -0,0 +1,108 @@
|
|||
115
|
||||
134
|
||||
121
|
||||
184
|
||||
78
|
||||
84
|
||||
77
|
||||
159
|
||||
133
|
||||
90
|
||||
71
|
||||
185
|
||||
152
|
||||
165
|
||||
39
|
||||
64
|
||||
85
|
||||
50
|
||||
20
|
||||
75
|
||||
2
|
||||
120
|
||||
137
|
||||
164
|
||||
101
|
||||
56
|
||||
153
|
||||
63
|
||||
70
|
||||
10
|
||||
72
|
||||
37
|
||||
86
|
||||
27
|
||||
166
|
||||
186
|
||||
154
|
||||
131
|
||||
1
|
||||
122
|
||||
95
|
||||
14
|
||||
119
|
||||
3
|
||||
99
|
||||
172
|
||||
111
|
||||
142
|
||||
26
|
||||
82
|
||||
8
|
||||
31
|
||||
53
|
||||
28
|
||||
139
|
||||
110
|
||||
138
|
||||
175
|
||||
108
|
||||
145
|
||||
58
|
||||
76
|
||||
7
|
||||
23
|
||||
83
|
||||
49
|
||||
132
|
||||
57
|
||||
40
|
||||
48
|
||||
102
|
||||
11
|
||||
105
|
||||
146
|
||||
149
|
||||
66
|
||||
38
|
||||
155
|
||||
109
|
||||
128
|
||||
181
|
||||
43
|
||||
44
|
||||
94
|
||||
4
|
||||
169
|
||||
89
|
||||
96
|
||||
60
|
||||
69
|
||||
9
|
||||
163
|
||||
116
|
||||
45
|
||||
59
|
||||
15
|
||||
178
|
||||
34
|
||||
114
|
||||
17
|
||||
16
|
||||
79
|
||||
91
|
||||
100
|
||||
162
|
||||
125
|
||||
156
|
||||
65
|
|
@ -1,3 +1,31 @@
|
|||
BFFFBBFRRR
|
||||
FFFBBBFRRR
|
||||
BBFFBBFRLL
|
||||
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
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
use itertools::Itertools;
|
||||
use std::collections::HashMap;
|
||||
use std::error::Error;
|
||||
use std::fs::File;
|
||||
use std::io::{self, BufRead};
|
||||
use std::vec::Vec;
|
||||
|
||||
fn enumerate_chains(curr_jolts: u32, rest: &[u32], cache: &mut HashMap<(u32, u32), u64>) -> u64 {
|
||||
if rest.len() == 0 {
|
||||
println!("Finished path");
|
||||
1
|
||||
} else if rest[0] - curr_jolts > 3 {
|
||||
println!("Termindated chain at {}", curr_jolts);
|
||||
0
|
||||
} else {
|
||||
let jolts = rest[0];
|
||||
|
||||
if cache.contains_key(&(curr_jolts, jolts)) {
|
||||
println!("Chache hit for {} {}", curr_jolts, jolts);
|
||||
return cache[&(curr_jolts, jolts)];
|
||||
}
|
||||
|
||||
println!("Chache miss for {} {}", curr_jolts, jolts);
|
||||
|
||||
let res = if rest.len() > 3 {
|
||||
enumerate_chains(jolts, &rest[1..], cache)
|
||||
+ enumerate_chains(jolts, &rest[2..], cache)
|
||||
+ enumerate_chains(jolts, &rest[3..], cache)
|
||||
} else if rest.len() > 2 {
|
||||
enumerate_chains(jolts, &rest[1..], cache) + enumerate_chains(jolts, &rest[2..], cache)
|
||||
} else {
|
||||
enumerate_chains(jolts, &rest[1..], cache)
|
||||
};
|
||||
|
||||
cache.insert((curr_jolts, jolts), res);
|
||||
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let file = File::open("inputs/day10.txt")?;
|
||||
let lines = io::BufReader::new(file).lines().map(|l| l.unwrap());
|
||||
|
||||
let mut adapters: Vec<u32> = lines.map(|l| l.parse().unwrap()).collect();
|
||||
adapters.sort();
|
||||
adapters.insert(0, 0);
|
||||
adapters.push(adapters.iter().last().unwrap() + 3);
|
||||
|
||||
let diff_hist: HashMap<u32, u32> =
|
||||
adapters
|
||||
.windows(2)
|
||||
.map(|win| win[1] - win[0])
|
||||
.fold(HashMap::new(), |mut map, x| {
|
||||
map.entry(x).and_modify(|e| *e = *e + 1).or_insert(1);
|
||||
map
|
||||
});
|
||||
|
||||
println!("{:?}", diff_hist);
|
||||
println!("Answer: {}", diff_hist[&1] * diff_hist[&3]);
|
||||
|
||||
let chains = enumerate_chains(0, &adapters, &mut HashMap::new());
|
||||
println!("Number of possible chains: {}", chains);
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -61,7 +61,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
|
||||
for pair in seat_ids.windows(2) {
|
||||
if pair[1] != pair[0] + 1 {
|
||||
println!("Missing ID: {}", pair[0] + 1 );
|
||||
println!("Missing ID: {}", pair[0] + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue