From e9f5cbe12013d3c41a6c438e767025aba66fe53b Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Tue, 8 Dec 2020 21:32:45 -0800 Subject: 09 --- 09/src/main.rs | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 09/src/main.rs (limited to '09/src/main.rs') diff --git a/09/src/main.rs b/09/src/main.rs new file mode 100644 index 0000000..ca978cb --- /dev/null +++ b/09/src/main.rs @@ -0,0 +1,83 @@ +use advent_lib::prelude::*; + + +fn main() -> Result<()> { + let mut args = std::env::args(); + if args.len() != 2 { + eprintln!("Usage: advent input"); + } + let _ = args.next(); + let filename = args.next().unwrap(); + + let input = advent_lib::read_lines_file(&filename)?; + + let mut ciphertext: Vec = Vec::new(); + for line in &input { + ciphertext.push(line.parse::().unwrap()); + } + + let mut first_key = 0; + + for i in 25 .. ciphertext.len() { + let sum = ciphertext[i]; + let mut found_addends = false; + + for j in 0 .. 25 { + let a = ciphertext[i - 25 + j]; + let b = sum - a; + for k in j + 1 .. 25 { + if ciphertext[i - 25 + k] == b { + found_addends = true; + break; + } + } + if found_addends { + break; + } + } + + if !found_addends { + println!("{}", sum); + first_key = sum; + break; + } + } + + for run_length in 2 .. ciphertext.len() { + let mut sum = 0; + let found_solution = false; + + for i in 0 .. ciphertext.len() - run_length { + sum += ciphertext[i]; + + if i >= run_length { + sum -= ciphertext[i - run_length]; + } + + if sum == first_key { + let mut min = 0; + let mut max = 0; + + for j in 0 .. run_length { + let item = ciphertext[i - run_length + j + 1]; + if j == 0 || item < min { + min = item; + } + if j == 0 || item > max { + max = item; + } + } + + println!("{}", min + max); + break; + } + } + + if found_solution { + break; + } + } + + Ok(()) +} + -- cgit 1.4.1