From 1bcd38be176156cdd771eaf4946f42a0f0efe2f2 Mon Sep 17 00:00:00 2001 From: Johannes Date: Mon, 2 Dec 2024 19:01:49 +0100 Subject: [PATCH] day 2 part 1 --- src/day02.rs | 40 ++++++++++++++++++++++++++++++++++++---- src/main.rs | 3 ++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/day02.rs b/src/day02.rs index 13e76ca..61fb6fd 100644 --- a/src/day02.rs +++ b/src/day02.rs @@ -1,17 +1,49 @@ use std::fs::read_to_string; +use itertools::Itertools; + pub fn day_main() { - let input = read_to_string("input/day01.txt").unwrap(); + let input = read_to_string("input/day02.txt").unwrap(); println!("part1: {}", part1(&input)); // println!("part2: {}", part2(&input)); } -type Int = i32; +fn part1(input: &str) -> usize { + input + .lines() + .map(|line| { + line.split_whitespace() + .map(|s| s.parse::().unwrap()) + .collect_vec() + }) + .filter(|report: &Vec| { + let pairs = report + .windows(2) + .map(|window| window[1] - window[0]) + .collect_vec(); + let steepest_slope = pairs.iter().map(|x| x.abs()).max().unwrap(); + let lowest_slope = pairs.iter().map(|x| x.abs()).min().unwrap(); + let same_sign = pairs.iter().map(|x| x.signum()).unique().count() == 1; + println!("{:?} - {steepest_slope}/{same_sign}", report); -fn part1(input: &str) -> Int { - 0 + steepest_slope <= 3 && lowest_slope >= 1 && same_sign + }) + .count() } // fn part2(input: &str) -> Int { // 0 // } +#[cfg(test)] +mod test { + #[test] + fn part1() { + let input = r"7 6 4 2 1 +1 2 7 8 9 +9 7 6 2 1 +1 3 2 4 5 +8 6 4 4 1 +1 3 6 7 9"; + assert_eq!(2, super::part1(input)); + } +} diff --git a/src/main.rs b/src/main.rs index bc49c25..2c89abf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,12 @@ use std::env::args; -use advent_of_rust_2024::day01; +use advent_of_rust_2024::{day01, day02}; fn main() { let day: Option = args().nth(1).and_then(|a| a.parse().ok()); match day { Some(1) => day01::day_main(), + Some(2) => day02::day_main(), _ => println!("hi"), } }