diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-12-18 13:21:42 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-12-18 13:21:42 -0500 |
commit | d16795e44aeac17bee08363bd08c1a9672edf3d4 (patch) | |
tree | 3f70ddaf74b10db3f0e38c8a81838607f4e26a2c /src/2020/9/mod.rs | |
parent | d1cacab50a8cab269da867ae900e903648b42cff (diff) | |
download | advent-of-code-d16795e44aeac17bee08363bd08c1a9672edf3d4.tar.gz advent-of-code-d16795e44aeac17bee08363bd08c1a9672edf3d4.zip |
factor out parsing
Diffstat (limited to 'src/2020/9/mod.rs')
-rw-r--r-- | src/2020/9/mod.rs | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/2020/9/mod.rs b/src/2020/9/mod.rs index 9d1bc9f..c067ca0 100644 --- a/src/2020/9/mod.rs +++ b/src/2020/9/mod.rs @@ -1,7 +1,10 @@ -pub fn part1() -> anyhow::Result<i64> { - const WINDOW: usize = 25; +const WINDOW: usize = 25; - let list: Vec<_> = data_ints!()?.collect(); +pub fn parse(fh: std::fs::File) -> anyhow::Result<Vec<i64>> { + Ok(crate::util::parse::ints(crate::util::parse::lines(fh)).collect()) +} + +pub fn part1(list: Vec<i64>) -> anyhow::Result<i64> { for i in 0..(list.len() - WINDOW) { let set = &list[i..i + WINDOW]; let n = list[i + WINDOW]; @@ -13,10 +16,7 @@ pub fn part1() -> anyhow::Result<i64> { Err(anyhow::anyhow!("failed to find invalid number")) } -pub fn part2() -> anyhow::Result<i64> { - const WINDOW: usize = 25; - - let list: Vec<_> = data_ints!()?.collect(); +pub fn part2(list: Vec<i64>) -> anyhow::Result<i64> { let mut invalid = None; for i in 0..(list.len() - WINDOW) { let set = &list[i..i + WINDOW]; @@ -63,6 +63,12 @@ fn valid(set: &[i64], n: i64) -> bool { #[test] fn test() { - assert_eq!(part1().unwrap(), 373803594); - assert_eq!(part2().unwrap(), 51152360); + assert_eq!( + part1(parse(crate::util::data(2020, 9).unwrap()).unwrap()).unwrap(), + 373803594 + ); + assert_eq!( + part2(parse(crate::util::data(2020, 9).unwrap()).unwrap()).unwrap(), + 51152360 + ); } |