summaryrefslogtreecommitdiff
path: root/2018/src/bin/day_1.rs
diff options
context:
space:
mode:
Diffstat (limited to '2018/src/bin/day_1.rs')
-rw-r--r--2018/src/bin/day_1.rs32
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(())
+}