From 026be18835900671790ef0fa0c186224f2aefad4 Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Sat, 1 Dec 2018 12:20:10 +0000 Subject: [PATCH] Day 1 --- .gitignore | 3 +++ 01/part1.rs | 30 ++++++++++++++++++++++++++++++ 01/part2.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 .gitignore create mode 100644 01/part1.rs create mode 100644 01/part2.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9da658f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*/input +*/part1 +*/part2 diff --git a/01/part1.rs b/01/part1.rs new file mode 100644 index 0000000..bec44f2 --- /dev/null +++ b/01/part1.rs @@ -0,0 +1,30 @@ +use std::error::Error; +use std::fs::File; +use std::io::BufReader; +use std::io::prelude::*; + +fn main() -> std::io::Result<()> { + let file = match File::open("input") { + // The `description` method of `io::Error` returns a string that describes the error + Err(why) => panic!("couldn't open input: {}", Error::description(&why)), + Ok(file) => file, + }; + + let reader = BufReader::new(file); + let lines = reader.lines(); + + let mut total: i128 = 0; + + for result in lines { + let l = result.unwrap(); + let offset:i128 = i128::from_str_radix(&l, 10).unwrap(); + + println!("{} => {}", l, offset); + + total = total + offset; + } + + println!("{}", total); + + Ok(()) +} diff --git a/01/part2.rs b/01/part2.rs new file mode 100644 index 0000000..5308457 --- /dev/null +++ b/01/part2.rs @@ -0,0 +1,45 @@ +use std::collections::HashSet; +use std::error::Error; +use std::fs::File; +use std::io::BufReader; +use std::io::SeekFrom; +use std::io::prelude::*; + +fn main() -> std::io::Result<()> { + let mut file = match File::open("input") { + // The `description` method of `io::Error` returns a string that describes the error + Err(why) => panic!("couldn't open input: {}", Error::description(&why)), + Ok(file) => file, + }; + + let mut repeat = true; + let mut total: i128 = 0; + let mut seen = HashSet::::new(); + seen.insert(0); + + while repeat { + file.seek(SeekFrom::Start(0)); + let reader = BufReader::new(&file); + let lines = reader.lines(); + + for result in lines { + let l = result.unwrap(); + let offset:i128 = i128::from_str_radix(&l, 10).unwrap(); + + total = total + offset; + println!("{} => {}", offset, total); + + if seen.contains(&total) { + println!("seen {} before", total); + repeat = false; + break; + } + + seen.insert(total); + } + } + + println!("{}", total); + + Ok(()) +}