2021: day01 part 1 & part 2
This commit is contained in:
parent
0272809c82
commit
3e991d5ac1
2000
aoc2021/input/day01.txt
Normal file
2000
aoc2021/input/day01.txt
Normal file
File diff suppressed because it is too large
Load diff
45
aoc2021/src/day01.rs
Normal file
45
aoc2021/src/day01.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
use std::fmt::Write;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
const INPUT: &str = include_str!("../input/day01.txt");
|
||||
|
||||
pub fn run() -> Result<String> {
|
||||
let mut res = String::with_capacity(128);
|
||||
|
||||
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||
writeln!(res, "part 2: {}", part2(INPUT)?)?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> Result<usize> {
|
||||
let measurements = input
|
||||
.lines()
|
||||
.map(|line| line.parse::<u64>().map_err(anyhow::Error::new))
|
||||
.collect::<Result<Vec<_>>>()?;
|
||||
|
||||
Ok(measurements.windows(2).filter(|w| w[0] < w[1]).count())
|
||||
}
|
||||
|
||||
fn part2(input: &str) -> Result<usize> {
|
||||
let measurements = input
|
||||
.lines()
|
||||
.map(|line| line.parse::<u64>().map_err(anyhow::Error::new))
|
||||
.collect::<Result<Vec<_>>>()?;
|
||||
|
||||
let mut increases = 0;
|
||||
let mut prev: Option<u64> = None;
|
||||
|
||||
for window in measurements.windows(3) {
|
||||
let sum = window.iter().sum();
|
||||
if let Some(prev) = prev {
|
||||
if prev < sum {
|
||||
increases += 1;
|
||||
}
|
||||
}
|
||||
prev = Some(sum);
|
||||
}
|
||||
|
||||
Ok(increases)
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
#![warn(clippy::explicit_iter_loop, clippy::redundant_closure_for_method_calls)]
|
||||
|
||||
pub mod day00;
|
||||
pub mod day01;
|
||||
|
|
|
@ -2,10 +2,10 @@ use anyhow::Result;
|
|||
|
||||
use aoc::DayFunc;
|
||||
|
||||
use aoc2021::day00;
|
||||
use aoc2021::day01;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let days: &[DayFunc] = &[day00::run];
|
||||
let days: &[DayFunc] = &[day01::run];
|
||||
|
||||
aoc::run(days)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue