From 4cd7570ba9a569a441f1224fe9bf6baf060ad52e Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Fri, 2 Dec 2022 08:31:20 -0800 Subject: [PATCH] Refactor file handling to file.rs --- 2022/aoc2022/src/day1.rs | 16 +++++++++------- 2022/aoc2022/src/file.rs | 11 +++++++++++ 2022/aoc2022/src/main.rs | 11 ++++++++++- 3 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 2022/aoc2022/src/file.rs diff --git a/2022/aoc2022/src/day1.rs b/2022/aoc2022/src/day1.rs index 3304ee9..7f16316 100644 --- a/2022/aoc2022/src/day1.rs +++ b/2022/aoc2022/src/day1.rs @@ -1,10 +1,10 @@ -use std::fs::File; use std::io::BufRead; -use std::io::BufReader; use std::io::Lines; use std::io::Read; use std::io::Result; +use crate::file::line_reader_for_file; + fn get_calorie_totals(lines: Lines) -> Vec { let mut elves: Vec = Vec::new(); let mut current_calorie_count: u32 = 0; @@ -13,7 +13,6 @@ fn get_calorie_totals(lines: Lines) -> Vec { let unwrapped_line = line.unwrap(); if unwrapped_line.is_empty() { elves.push(current_calorie_count); - println!("Elf {}: {} calories", elves.len(), current_calorie_count); current_calorie_count = 0; continue; } @@ -28,12 +27,15 @@ fn get_calorie_totals(lines: Lines) -> Vec { } pub fn main(input_filename: &String) -> Result<()> { - let file = File::open(input_filename)?; - let reader = BufReader::new(file); + let line_reader = line_reader_for_file(input_filename.as_str()) + .expect(format!("Unable to create line reader for file: {}", input_filename).as_str()); + let elves = get_calorie_totals(line_reader); - let elves = get_calorie_totals(reader.lines()); + println!("Part 1: Elf with highest calorie count in knapsack: {}", elves[0]); - println!("Elf with highest calorie count in knapsack: {}", elves[0]); + let sum_of_top_three = &elves[0] + &elves[1] + &elves[2]; + println!("Part 2: Elves with top 3 highest calorie counts in their knapsacks: {}, {}, {} = {}", + &elves[0], &elves[1], &elves[2], sum_of_top_three); Ok(()) } diff --git a/2022/aoc2022/src/file.rs b/2022/aoc2022/src/file.rs new file mode 100644 index 0000000..8bcc97e --- /dev/null +++ b/2022/aoc2022/src/file.rs @@ -0,0 +1,11 @@ +use std::fs::File; +use std::io::BufRead; +use std::io::BufReader; +use std::io::Lines; +use std::io::Result; + +pub fn line_reader_for_file(filename: &str) -> Result>> { + let file = File::open(filename)?; + let reader = BufReader::new(file); + Ok(reader.lines()) +} diff --git a/2022/aoc2022/src/main.rs b/2022/aoc2022/src/main.rs index 396355c..369c0f4 100644 --- a/2022/aoc2022/src/main.rs +++ b/2022/aoc2022/src/main.rs @@ -1,12 +1,21 @@ use std::env; mod day1; +mod day2; +mod file; fn main() { let args: Vec = env::args().collect(); - dbg!("Command line args: {}", &args); + assert!(args.len() >= 3, "Missing command line arguments"); + + println!("----- Day 1 -----"); let day1_datafile = &args[1]; day1::main(day1_datafile) .expect("Unable to process day1 data file"); + + println!("----- Day 2 -----"); + let day2_datafile = &args[2]; + day2::main(day2_datafile.as_str()) + .expect("Unable to process day2 data file"); }