diff options
author | Jesse Luehrs <doy@tozt.net> | 2022-12-11 21:59:21 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2022-12-11 22:16:30 -0500 |
commit | e2d219b331a878bbb3c9dcef9ea4e218b2e3ee06 (patch) | |
tree | 93e418011c45cab8d4070d3d33b377a9364f4a27 /src/2020/9/mod.rs | |
parent | 179467096141b7e8f67d63b89fd21e779a564fe6 (diff) | |
download | advent-of-code-e2d219b331a878bbb3c9dcef9ea4e218b2e3ee06.tar.gz advent-of-code-e2d219b331a878bbb3c9dcef9ea4e218b2e3ee06.zip |
refactor
Diffstat (limited to 'src/2020/9/mod.rs')
-rw-r--r-- | src/2020/9/mod.rs | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/src/2020/9/mod.rs b/src/2020/9/mod.rs deleted file mode 100644 index 0d2dd6f..0000000 --- a/src/2020/9/mod.rs +++ /dev/null @@ -1,74 +0,0 @@ -use crate::prelude::*; - -const WINDOW: usize = 25; - -pub fn parse(fh: File) -> Result<Vec<i64>> { - Ok(parse::ints(parse::lines(fh)).collect()) -} - -pub fn part1(list: Vec<i64>) -> Result<i64> { - for i in 0..(list.len() - WINDOW) { - let set = &list[i..i + WINDOW]; - let n = list[i + WINDOW]; - if !valid(set, n) { - return Ok(n); - } - } - - Err(anyhow!("failed to find invalid number")) -} - -pub fn part2(list: Vec<i64>) -> Result<i64> { - let mut invalid = None; - for i in 0..(list.len() - WINDOW) { - let set = &list[i..i + WINDOW]; - let n = list[i + WINDOW]; - if !valid(set, n) { - invalid = Some(n); - } - } - if invalid.is_none() { - return Err(anyhow!("failed to find invalid number")); - } - let invalid = invalid.unwrap(); - - for i in 0..list.len() { - for j in i..list.len() { - let seq = &list[i..=j]; - if invalid == seq.iter().sum() { - return Ok(seq.iter().copied().min().unwrap() - + seq.iter().copied().max().unwrap()); - } - } - } - - Err(anyhow!("failed to find sequence summing to invalid number")) -} - -fn valid(set: &[i64], n: i64) -> bool { - for i in 0..set.len() { - for j in 0..set.len() { - if i == j { - continue; - } - let i = set[i]; - let j = set[j]; - if i + j == n { - return true; - } - } - } - false -} - -#[test] -fn test() { - assert_eq!( - part1(parse(parse::data(2020, 9).unwrap()).unwrap()).unwrap(), - 373803594 - ); - assert_eq!( - part2(parse(parse::data(2020, 9).unwrap()).unwrap()).unwrap(), - 51152360 - ); -} |