summaryrefslogtreecommitdiffstats
path: root/src/2020/9/mod.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-11 21:59:21 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-11 22:16:30 -0500
commite2d219b331a878bbb3c9dcef9ea4e218b2e3ee06 (patch)
tree93e418011c45cab8d4070d3d33b377a9364f4a27 /src/2020/9/mod.rs
parent179467096141b7e8f67d63b89fd21e779a564fe6 (diff)
downloadadvent-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.rs74
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
- );
-}