Improve 2020/15

fold() the world :umu:
This commit is contained in:
kageru 2020-12-15 10:32:11 +01:00
parent 1b2652a70d
commit c95653f24d

View File

@ -13,32 +13,20 @@ fn parse_input(raw: &str) -> Parsed {
} }
fn part1(parsed: &Parsed, limit: usize) -> usize { fn part1(parsed: &Parsed, limit: usize) -> usize {
let mut iter = parsed.iter(); (parsed.len()..limit - 1)
let mut previous = HashMap::new(); .fold(
let mut current = 0; (parsed.iter().enumerate().map(|(i, n)| (*n, i)).collect::<HashMap<_, _>>(), 0),
for i in 0..limit - 1 { |(mut prev, curr), i| {
if let Some(&n) = iter.next() { let next = prev.get(&curr).map(|p| i - p).unwrap_or(0);
current = n; prev.insert(curr, i);
previous.insert(current, i); (prev, next)
current = 0; },
continue; )
} .1
println!("Adding {} to {:?}", current, previous);
match previous.get(&current) {
Some(&position) => {
previous.insert(current, i);
current = i.saturating_sub(position);
}
None => {
previous.insert(current, i);
current = 0;
}
}
}
current
} }
// only here so the test/bench macro works // only here so the test/bench macro works
#[inline]
fn part2(parsed: &Parsed, limit: usize) -> usize { fn part2(parsed: &Parsed, limit: usize) -> usize {
part1(parsed, limit) part1(parsed, limit)
} }
@ -60,7 +48,7 @@ mod tests {
test!(part1(2020) == 436); test!(part1(2020) == 436);
test!(part2(30000000) == 175594); test!(part2(30000000) == 175594);
//bench!(part1() == 0); bench!(part1(2020) == 249);
//bench!(part2() == 0); // bench!(part2(30000000) == 41687);
bench_input!(len == 6); bench_input!(len == 6);
} }