From d81f83e63e19d8997c61e0eed9ff8d8feddbae8f Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Tue, 1 Dec 2020 18:27:00 +0100 Subject: day1 --- src/main.rs | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/main.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ee10457 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,76 @@ +#![allow(dead_code)] + +use std::fs; +use std::collections::HashSet; + +fn read_file(file: &str) -> String { + fs::read_to_string(file).unwrap() +} + +fn read_numbers(file: &str) -> Vec { + read_file(file).split('\n') + .filter(|x| !x.is_empty()) + .map(|x| x.parse::().unwrap()) + .collect() +} + +fn find_pair_with_sum(numbers: &HashSet, goal: i32) -> Option<(i32, i32)> { + for i in numbers { + if numbers.contains(&(goal - i)) { + return Some((*i, goal - i)); + } + } + None +} + +fn day1() { + let input = read_numbers("input01"); + let mut numbers = HashSet::new(); + for i in &input { + numbers.insert(*i); + } + let (x, y) = match find_pair_with_sum(&numbers, 2020) { + Some(pair) => pair, + None => panic!("nothing found"), + }; + println!("1a: {}", x * y); + + for i in &numbers { + let (x, y) = match find_pair_with_sum(&numbers, 2020 - i) { + Some(pair) => pair, + None => continue, + }; + println!("1b: {}", i * x * y); + break; + } +} + +fn main() { + day1(); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_day1() { + let input = [1721, 979, 366, 299, 675, 1456]; + let mut numbers = HashSet::new(); + for i in &input { + numbers.insert(*i); + } + let (x, y) = find_pair_with_sum(&numbers, 2020).unwrap(); + assert_eq!(x * y, 514579); + + for i in &numbers { + let (x, y) = match find_pair_with_sum(&numbers, 2020 - i) { + Some(pair) => pair, + None => continue, + }; + assert_eq!(i + x + y, 2020); + assert_eq!(i * x * y, 241861950); + break; + } + } +} -- cgit v1.2.3