Skip to content

Instantly share code, notes, and snippets.

@jafow
Created December 2, 2021 21:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jafow/bd514af7605cc2216d0e83b4bef69cbe to your computer and use it in GitHub Desktop.
Save jafow/bd514af7605cc2216d0e83b4bef69cbe to your computer and use it in GitHub Desktop.
aoc2021-d1
use common::{input, input_to_vec_ints};
fn p1 (xs: &Vec<i32>) -> u32 {
let mut iter = xs.iter();
let mut counter = 0_u32;
let mut last = iter.next();
for x in iter {
if last < Some(x) {
counter += 1;
}
last = Some(x)
}
counter
}
fn chunkit(xs: &Vec<i32>, window_size: usize) -> Vec<&[i32]> {
let stop = xs.len() - window_size + 1;
let iter = xs.iter().enumerate();
let mut res: Vec<&[i32]> = Vec::new();
for x in iter {
if x.0 == stop {
return res;
}
let chunk = &xs[x.0..(x.0 + window_size)];
res.push(chunk);
}
res
}
fn p2(xs: &Vec<i32>) -> u32 {
let window_size = 3usize;
let chunks = chunkit(xs, window_size);
let chunksums = chunks.iter().map(|c| c.iter().sum()).collect::<Vec<i32>>();
p1(&chunksums)
}
fn main() {
let raw: String = input();
let xs = input_to_vec_ints(&raw);
let part1 = p1(&xs);
println!("p1 counter {}", part1);
let part2 = p2(&xs);
println!("p2 counter {}", part2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment