From 4bff689da01af985e2f92a5341de51050b7d651a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 6 Dec 2019 19:06:49 +0100 Subject: [PATCH] aoc: stop printing inside run functions This will make benching implementations easier --- aoc/src/lib.rs | 10 ++++++---- aoc2015/src/day01.rs | 12 ++++++++---- aoc2015/src/day02.rs | 11 +++++++---- aoc2015/src/day03.rs | 11 +++++++---- aoc2015/src/day04.rs | 12 ++++++++---- aoc2015/src/day05.rs | 12 ++++++++---- aoc2015/src/day06.rs | 11 +++++++---- aoc2015/src/main.rs | 3 ++- aoc2018/src/day01.rs | 11 +++++++---- aoc2018/src/day02.rs | 11 +++++++---- aoc2018/src/day03.rs | 11 +++++++---- aoc2018/src/day04.rs | 9 ++++++--- aoc2018/src/day05.rs | 11 +++++++---- aoc2018/src/main.rs | 3 ++- aoc2019/src/day01.rs | 12 ++++++++---- aoc2019/src/day02.rs | 15 ++++++++++----- aoc2019/src/day03.rs | 11 +++++++---- aoc2019/src/day04.rs | 12 ++++++++---- aoc2019/src/day05.rs | 12 ++++++++---- aoc2019/src/day06.rs | 11 +++++++---- aoc2019/src/main.rs | 3 ++- 21 files changed, 139 insertions(+), 75 deletions(-) diff --git a/aoc/src/lib.rs b/aoc/src/lib.rs index bd6c1e7..9cc3a00 100644 --- a/aoc/src/lib.rs +++ b/aoc/src/lib.rs @@ -7,7 +7,7 @@ macro_rules! err { ($($string:expr),+) => (Box::::from(format!($($string),+))) } -type DayFunc = fn() -> Result<()>; +pub type DayFunc = fn() -> Result; pub fn run(days: &[DayFunc]) -> Result<()> { let mut args = env::args(); @@ -16,14 +16,16 @@ pub fn run(days: &[DayFunc]) -> Result<()> { match args.next() { Some(arg) => { let day: usize = arg.parse().expect("Please provide a day number"); - days[day - 1]().unwrap_or_else(|e| eprintln!("error running day specified: {}", e)); + let res = + days[day - 1]().or_else(|e| Err(err!("error running day specified: {}", e)))?; + println!("{}", res); } None => { for (i, day) in days.iter().enumerate() { let i = i + 1; println!("day{}: ", i); - day().unwrap_or_else(|e| eprintln!("error running day {}: {}", i, e)); - println!(); + let res = day().or_else(|e| Err(err!("error running day {}: {}", i, e)))?; + println!("{}", res); } } } diff --git a/aoc2015/src/day01.rs b/aoc2015/src/day01.rs index 64dc249..e722345 100644 --- a/aoc2015/src/day01.rs +++ b/aoc2015/src/day01.rs @@ -1,13 +1,17 @@ +use std::fmt::Write; + use aoc::err; use aoc::Result; const INPUT: &str = include_str!("../input/day01.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2015/src/day02.rs b/aoc2015/src/day02.rs index 59082f9..ba6818d 100644 --- a/aoc2015/src/day02.rs +++ b/aoc2015/src/day02.rs @@ -1,4 +1,5 @@ use std::error::Error; +use std::fmt::Write; use std::str::FromStr; use aoc::err; @@ -6,16 +7,18 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day02.txt"); -pub fn run() -> Result<()> { +pub fn run() -> Result { + let mut res = String::with_capacity(128); + let presents: Vec = INPUT .lines() .map(|line| line.parse()) .collect::>()?; - println!("part 1: {}", part1(&presents)); - println!("part 2: {}", part2(&presents)); + writeln!(res, "part 1: {}", part1(&presents))?; + writeln!(res, "part 2: {}", part2(&presents))?; - Ok(()) + Ok(res) } fn wrapping_paper(present: &Present) -> u64 { diff --git a/aoc2015/src/day03.rs b/aoc2015/src/day03.rs index 4eb4bf5..b91c8ed 100644 --- a/aoc2015/src/day03.rs +++ b/aoc2015/src/day03.rs @@ -1,15 +1,18 @@ use std::collections::HashSet; +use std::fmt::Write; use aoc::err; use aoc::Result; const INPUT: &str = include_str!("../input/day03.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2015/src/day04.rs b/aoc2015/src/day04.rs index ce7fae3..b59e0fe 100644 --- a/aoc2015/src/day04.rs +++ b/aoc2015/src/day04.rs @@ -1,3 +1,5 @@ +use std::fmt::Write; + use md5::{Digest, Md5}; use aoc::err; @@ -5,11 +7,13 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day04.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2015/src/day05.rs b/aoc2015/src/day05.rs index c54e60d..41c15cd 100644 --- a/aoc2015/src/day05.rs +++ b/aoc2015/src/day05.rs @@ -1,12 +1,16 @@ +use std::fmt::Write; + use aoc::Result; const INPUT: &str = include_str!("../input/day05.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)); - println!("part 2: {}", part2(INPUT)); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT))?; + writeln!(res, "part 2: {}", part2(INPUT))?; + + Ok(res) } fn part1(input: &str) -> usize { diff --git a/aoc2015/src/day06.rs b/aoc2015/src/day06.rs index a9d2acd..245aa1f 100644 --- a/aoc2015/src/day06.rs +++ b/aoc2015/src/day06.rs @@ -1,4 +1,5 @@ use std::error::Error; +use std::fmt::Write; use std::str::FromStr; use aoc::err; @@ -6,11 +7,13 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day06.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2015/src/main.rs b/aoc2015/src/main.rs index 9318e18..d712f92 100644 --- a/aoc2015/src/main.rs +++ b/aoc2015/src/main.rs @@ -1,3 +1,4 @@ +use aoc::DayFunc; use aoc::Result; use aoc2015::day01; @@ -8,7 +9,7 @@ use aoc2015::day05; use aoc2015::day06; fn main() -> Result<()> { - let days: &[fn() -> Result<()>] = &[ + let days: &[DayFunc] = &[ day01::run, day02::run, day03::run, diff --git a/aoc2018/src/day01.rs b/aoc2018/src/day01.rs index 66009e8..6ea274b 100644 --- a/aoc2018/src/day01.rs +++ b/aoc2018/src/day01.rs @@ -1,14 +1,17 @@ use std::collections::HashSet; +use std::fmt::Write; use aoc::Result; const INPUT: &str = include_str!("../input/day01.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2018/src/day02.rs b/aoc2018/src/day02.rs index 9c39af6..cae3cab 100644 --- a/aoc2018/src/day02.rs +++ b/aoc2018/src/day02.rs @@ -1,14 +1,17 @@ use std::collections::HashMap; +use std::fmt::Write; use aoc::Result; const INPUT: &str = include_str!("../input/day02.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2018/src/day03.rs b/aoc2018/src/day03.rs index 9235b68..0c5ee04 100644 --- a/aoc2018/src/day03.rs +++ b/aoc2018/src/day03.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::collections::HashSet; use std::error::Error; +use std::fmt::Write; use std::str::FromStr; use aoc::err; @@ -8,11 +9,13 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day03.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } struct Claim { diff --git a/aoc2018/src/day04.rs b/aoc2018/src/day04.rs index 51733de..6ff8cab 100644 --- a/aoc2018/src/day04.rs +++ b/aoc2018/src/day04.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::error::Error; +use std::fmt::Write; use std::str::FromStr; use aoc::err; @@ -13,10 +14,12 @@ fn sorted_lines(input: &str) -> String { lines.join("\n") } -pub fn run() -> Result<()> { - println!("part 1: {}", part1(&sorted_lines(INPUT))?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(&sorted_lines(INPUT))?)?; + + Ok(res) } #[derive(Debug)] diff --git a/aoc2018/src/day05.rs b/aoc2018/src/day05.rs index 890bf1e..a17af8c 100644 --- a/aoc2018/src/day05.rs +++ b/aoc2018/src/day05.rs @@ -1,14 +1,17 @@ use std::collections::HashSet; +use std::fmt::Write; use aoc::Result; const INPUT: &str = include_str!("../input/day05.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)); - println!("part 2: {}", part2(INPUT)); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT))?; + writeln!(res, "part 2: {}", part2(INPUT))?; + + Ok(res) } fn same_type(a: char, b: char) -> bool { diff --git a/aoc2018/src/main.rs b/aoc2018/src/main.rs index 5aaf2e6..a4b9ebf 100644 --- a/aoc2018/src/main.rs +++ b/aoc2018/src/main.rs @@ -1,3 +1,4 @@ +use aoc::DayFunc; use aoc::Result; use aoc2018::day01; @@ -7,7 +8,7 @@ use aoc2018::day04; use aoc2018::day05; fn main() -> Result<()> { - let days: &[fn() -> Result<()>] = &[day01::run, day02::run, day03::run, day04::run, day05::run]; + let days: &[DayFunc] = &[day01::run, day02::run, day03::run, day04::run, day05::run]; aoc::run(days) } diff --git a/aoc2019/src/day01.rs b/aoc2019/src/day01.rs index 4a7a10c..cd80e1d 100644 --- a/aoc2019/src/day01.rs +++ b/aoc2019/src/day01.rs @@ -1,12 +1,16 @@ +use std::fmt::Write; + use aoc::Result; const INPUT: &str = include_str!("../input/day01.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn fuel_needed(module_weight: u64) -> u64 { diff --git a/aoc2019/src/day02.rs b/aoc2019/src/day02.rs index 495496a..96717dd 100644 --- a/aoc2019/src/day02.rs +++ b/aoc2019/src/day02.rs @@ -1,3 +1,5 @@ +use std::fmt::Write; + use aoc::err; use aoc::Result; @@ -12,12 +14,15 @@ fn parse_intcode(input: &str) -> Result> { .collect() } -pub fn run() -> Result<()> { - let intcode = parse_intcode(INPUT)?; - println!("part 1: {}", part1(&mut intcode.clone())?); - println!("part 2: {}", part2(&intcode, PART2_EXPECTED)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + let intcode = parse_intcode(INPUT)?; + + writeln!(res, "part 1: {}", part1(&mut intcode.clone())?)?; + writeln!(res, "part 2: {}", part2(&intcode, PART2_EXPECTED)?)?; + + Ok(res) } fn eval(intcode: &mut [usize]) -> Result<()> { diff --git a/aoc2019/src/day03.rs b/aoc2019/src/day03.rs index d0efec1..5a686bc 100644 --- a/aoc2019/src/day03.rs +++ b/aoc2019/src/day03.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::collections::HashSet; use std::error::Error; +use std::fmt::Write; use std::str::FromStr; use aoc::err; @@ -8,11 +9,13 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day03.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } enum Move { diff --git a/aoc2019/src/day04.rs b/aoc2019/src/day04.rs index 85f49b9..a33fdbf 100644 --- a/aoc2019/src/day04.rs +++ b/aoc2019/src/day04.rs @@ -1,13 +1,17 @@ +use std::fmt::Write; + use aoc::err; use aoc::Result; const INPUT: &str = include_str!("../input/day04.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2019/src/day05.rs b/aoc2019/src/day05.rs index 651bd4d..d3460f2 100644 --- a/aoc2019/src/day05.rs +++ b/aoc2019/src/day05.rs @@ -1,13 +1,17 @@ +use std::fmt::Write; + use aoc::err; use aoc::Result; const INPUT: &str = include_str!("../input/day05.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn part1(input: &str) -> Result { diff --git a/aoc2019/src/day06.rs b/aoc2019/src/day06.rs index 0eaeff5..f3a51d4 100644 --- a/aoc2019/src/day06.rs +++ b/aoc2019/src/day06.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; use std::collections::HashSet; +use std::fmt::Write; use std::iter; use aoc::err; @@ -7,11 +8,13 @@ use aoc::Result; const INPUT: &str = include_str!("../input/day06.txt"); -pub fn run() -> Result<()> { - println!("part 1: {}", part1(INPUT)?); - println!("part 2: {}", part2(INPUT)?); +pub fn run() -> Result { + let mut res = String::with_capacity(128); - Ok(()) + writeln!(res, "part 1: {}", part1(INPUT)?)?; + writeln!(res, "part 2: {}", part2(INPUT)?)?; + + Ok(res) } fn count_orbits( diff --git a/aoc2019/src/main.rs b/aoc2019/src/main.rs index eedfbff..0b2719e 100644 --- a/aoc2019/src/main.rs +++ b/aoc2019/src/main.rs @@ -1,3 +1,4 @@ +use aoc::DayFunc; use aoc::Result; use aoc2019::day01; @@ -8,7 +9,7 @@ use aoc2019::day05; use aoc2019::day06; fn main() -> Result<()> { - let days: &[fn() -> Result<()>] = &[ + let days: &[DayFunc] = &[ day01::run, day02::run, day03::run,