diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:31:44 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:31:44 +0200 |
commit | cb3d2db9b82f131ebb36a9b3bea6830bf1a80c0f (patch) | |
tree | f516c9f1084b8ed57efe60482a51860e7436550c /2018/src/bin/day_1.rs | |
parent | 34c0aa87fada4bf3bc75ff0493e0876e65289697 (diff) | |
parent | cfd9b4f2ad1a09bedf7f764f84448a61faab54a3 (diff) |
Merge branch '2018-main'
Diffstat (limited to '2018/src/bin/day_1.rs')
-rw-r--r-- | 2018/src/bin/day_1.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/2018/src/bin/day_1.rs b/2018/src/bin/day_1.rs new file mode 100644 index 0000000..4693579 --- /dev/null +++ b/2018/src/bin/day_1.rs @@ -0,0 +1,32 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +extern crate im_rc; + +use std::error::Error; +use std::path::PathBuf; + +use im_rc::HashSet; + +// cargo watch -cs "cargo run --release --bin day_1" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/1.txt"))?; + let input_ints: Vec<i32> = input.iter().map(|str| str.parse::<i32>().unwrap()).collect(); + + println!("Input: {:?}", input_ints); + + let sum: i32 = input_ints.iter().sum(); + println!("Sum: {}", sum); + + let first_repeat = input_ints.iter().cycle().try_fold((0, HashSet::new()), |(acc, seen), &i| { + if seen.contains(&acc) { + Err(acc) + } else { + Ok((acc + i, seen.update(acc))) + } + }).err().unwrap(); + println!("First repeat: {}", first_repeat); + + Ok(()) +} |