summaryrefslogtreecommitdiffstats
path: root/day1/src
diff options
context:
space:
mode:
authorJan Tuomi <jan.tuomi@eficode.com>2018-12-04 15:42:54 +0200
committerJan Tuomi <jan.tuomi@eficode.com>2018-12-04 15:42:54 +0200
commitf70c926c17bc244bf51e8c05d891b0b13528fe8a (patch)
treead58a4ed55f257a668cceee88d2465a4c066ac38 /day1/src
Initial commit
Diffstat (limited to 'day1/src')
-rw-r--r--day1/src/main.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/day1/src/main.rs b/day1/src/main.rs
new file mode 100644
index 0000000..f9b93ce
--- /dev/null
+++ b/day1/src/main.rs
@@ -0,0 +1,41 @@
+use std::env;
+use std::io::BufReader;
+use std::io::BufRead;
+use std::fs::File;
+use std::process;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ if args.len() != 2 {
+ println!("Wrong number of arguments. Provide just a file name.");
+ process::exit(1);
+ }
+ let filename = &args[1];
+ println!("Using file {} as input.", filename);
+ let f = match File::open(filename) {
+ Ok(file) => file,
+ Err(e) => {
+ println!("Failed to open file {}. {:?}", filename, e);
+ process::exit(1);
+ }
+ };
+ let file = BufReader::new(&f);
+
+ let mut diffs: Vec<i32> = Vec::new();
+ for line in file.lines() {
+ let l = line.unwrap();
+ let res = l.parse::<i32>();
+ match res {
+ Ok(value) => {
+ diffs.push(value);
+ }
+ Err(e) => {
+ println!("{:?}. l: {:?}", e, l);
+ process::exit(1);
+ }
+ }
+ }
+
+ let result: i32 = diffs.iter().fold(0, |acc, x| acc + x);
+ println!("{}", result);
+}