From 11c5dcaaaf8a7828debe3bdedac45540364b61f6 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Wed, 1 Dec 2021 21:24:46 -0800 Subject: [PATCH] Use anyhow to make ? availble --- 2021/Cargo.lock | 7 +++++++ 2021/Cargo.toml | 1 + 2021/src/day2.rs | 39 +++++++++++++++++++++------------------ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/2021/Cargo.lock b/2021/Cargo.lock index 7d501a0..88af2b2 100644 --- a/2021/Cargo.lock +++ b/2021/Cargo.lock @@ -6,10 +6,17 @@ version = 3 name = "advent2021" version = "0.1.0" dependencies = [ + "anyhow", "aoc-runner", "aoc-runner-derive", ] +[[package]] +name = "anyhow" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203" + [[package]] name = "aoc-runner" version = "0.3.0" diff --git a/2021/Cargo.toml b/2021/Cargo.toml index 33191e7..0b27eb0 100644 --- a/2021/Cargo.toml +++ b/2021/Cargo.toml @@ -6,5 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +anyhow = "1.0.45" aoc-runner = "0.3.0" aoc-runner-derive = "0.3.0" diff --git a/2021/src/day2.rs b/2021/src/day2.rs index b65e675..54769da 100644 --- a/2021/src/day2.rs +++ b/2021/src/day2.rs @@ -52,49 +52,50 @@ //! //! Using this new interpretation of the commands, calculate the horizontal position and depth you would have after following the planned course. What do you get if you multiply your final horizontal position by your final depth? +use anyhow::Result; use aoc_runner_derive::{aoc, aoc_generator}; #[aoc(day2, part1)] -fn part1(input: &str) -> i32 { +fn part1(input: &str) -> Result { let mut horizontal: i32 = 0; let mut depth: i32 = 0; - input.split("\n").for_each(|l| { + for l in input.split("\n") { let p: Vec<_> = l.split(" ").collect(); match p[0] { - "forward" => horizontal += p[1].parse::().expect("forward"), - "up" => depth -= p[1].parse::().expect("up"), - "down" => depth += p[1].parse::().expect("down"), + "forward" => horizontal += p[1].parse::()?, + "up" => depth -= p[1].parse::()?, + "down" => depth += p[1].parse::()?, _ => panic!("unknown command {}", p[0]), } - }); - horizontal * depth + } + Ok(horizontal * depth) } #[aoc(day2, part2)] -fn part2(input: &str) -> i32 { +fn part2(input: &str) -> Result { let mut horizontal: i32 = 0; let mut depth: i32 = 0; let mut aim: i32 = 0; - input.split("\n").for_each(|l| { + for l in input.split("\n") { let p: Vec<_> = l.split(" ").collect(); match p[0] { "forward" => { - let v = p[1].parse::().expect("forward"); + let v = p[1].parse::()?; horizontal += v; depth += v * aim; } - "up" => aim -= p[1].parse::().expect("up"), - "down" => aim += p[1].parse::().expect("down"), + "up" => aim -= p[1].parse::()?, + "down" => aim += p[1].parse::()?, _ => panic!("unknown command {}", p[0]), } - }); - horizontal * depth + } + Ok(horizontal * depth) } #[test] -fn test_part1() { +fn test_part1() -> Result<()> { let input = r#" forward 5 down 5 @@ -104,11 +105,12 @@ down 8 forward 2 "# .trim(); - assert_eq!(part1(input), 150); + assert_eq!(part1(input)?, 150); + Ok(()) } #[test] -fn test_part2() { +fn test_part2() -> Result<()> { let input = r#" forward 5 down 5 @@ -118,5 +120,6 @@ down 8 forward 2 "# .trim(); - assert_eq!(part2(input), 900); + assert_eq!(part2(input)?, 900); + Ok(()) }