From 2848a9ae1fb1b5c04f3e49377f4f384277af3e88 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Fri, 17 Dec 2021 19:40:54 -0800 Subject: [PATCH] Day 17 part 1 --- 2021/input/2021/day17.txt | 1 + 2021/src/day17.rs | 76 +++++++++++++++++++++++++++++++++++++++ 2021/src/lib.rs | 1 + 3 files changed, 78 insertions(+) create mode 100644 2021/input/2021/day17.txt create mode 100644 2021/src/day17.rs diff --git a/2021/input/2021/day17.txt b/2021/input/2021/day17.txt new file mode 100644 index 0000000..ff87706 --- /dev/null +++ b/2021/input/2021/day17.txt @@ -0,0 +1 @@ +target area: x=88..125, y=-157..-103 diff --git a/2021/src/day17.rs b/2021/src/day17.rs new file mode 100644 index 0000000..778ada0 --- /dev/null +++ b/2021/src/day17.rs @@ -0,0 +1,76 @@ +use advent::prelude::*; +use aoc_runner_derive::{aoc, aoc_generator}; + +#[derive(Debug)] +struct Target { + x_min: isize, + x_max: isize, + y_min: isize, + y_max: isize, +} + +impl FromStr for Target { + type Err = Infallible; + + fn from_str(input: &str) -> std::result::Result { + let parts: Vec<_> = input.split(' ').collect(); + let x = &parts[2][2..].strip_suffix(',').unwrap(); + let y = &parts[3][2..]; + let (x_min, x_max) = x + .split_once("..") + .and_then(|(min, max)| Some((min.parse().unwrap(), max.parse().unwrap()))) + .unwrap(); + let (y_min, y_max) = y + .split_once("..") + .and_then(|(min, max)| Some((min.parse().unwrap(), max.parse().unwrap()))) + .unwrap(); + + Ok(Target { + x_min, + x_max, + y_min, + y_max, + }) + } +} + +#[aoc(day17, part1)] +fn part1(input: &str) -> Result { + let tgt: Target = input.parse()?; + dbg!(&tgt); + Ok((0..(tgt.y_min).abs() as usize).sum()) +} + +/* +#[aoc(day17, part2)] +fn part2(input: &str) -> Result { + todo!("part2"); + Ok(0) +} +*/ + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_part1() -> Result<()> { + let input = r#" +target area: x=20..30, y=-10..-5 +"# + .trim(); + assert_eq!(part1(input)?, 45); + Ok(()) + } + + /* + #[test] + fn test_part2()->Result<()> { + let input = r#" + "# + .trim(); + assert_eq!(part2(input)?, usize::MAX); + Ok(()) + } + */ +} diff --git a/2021/src/lib.rs b/2021/src/lib.rs index e64251e..86cbda1 100644 --- a/2021/src/lib.rs +++ b/2021/src/lib.rs @@ -6,6 +6,7 @@ pub mod day13; //pub mod day14; pub mod day15; pub mod day16; +pub mod day17; pub mod day2; pub mod day3; pub mod day4;