From b905d7f7fdb2daabf2dc5b0acbbf51a3a50ab6e5 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Fri, 16 Dec 2022 00:09:42 +0000 Subject: [PATCH] Move Day 5 to its own crate --- 2022/day5/Cargo.lock | 7 ++++++ 2022/day5/Cargo.toml | 8 +++++++ .../data/day5-input.txt => day5/input.txt} | 0 .../{aoc2022/src/day5.rs => day5/src/main.rs} | 24 +++++++++---------- 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 2022/day5/Cargo.lock create mode 100644 2022/day5/Cargo.toml rename 2022/{aoc2022/data/day5-input.txt => day5/input.txt} (100%) rename 2022/{aoc2022/src/day5.rs => day5/src/main.rs} (91%) diff --git a/2022/day5/Cargo.lock b/2022/day5/Cargo.lock new file mode 100644 index 0000000..7a62bb0 --- /dev/null +++ b/2022/day5/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day5" +version = "0.1.0" diff --git a/2022/day5/Cargo.toml b/2022/day5/Cargo.toml new file mode 100644 index 0000000..f9b62bf --- /dev/null +++ b/2022/day5/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day5" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2022/aoc2022/data/day5-input.txt b/2022/day5/input.txt similarity index 100% rename from 2022/aoc2022/data/day5-input.txt rename to 2022/day5/input.txt diff --git a/2022/aoc2022/src/day5.rs b/2022/day5/src/main.rs similarity index 91% rename from 2022/aoc2022/src/day5.rs rename to 2022/day5/src/main.rs index 53807ee..4e7cc6b 100644 --- a/2022/aoc2022/src/day5.rs +++ b/2022/day5/src/main.rs @@ -1,7 +1,6 @@ +use std::env; use std::fmt; -use std::io::Result; - -use crate::file::line_reader_for_file; +use std::fs; #[derive(PartialEq)] enum State { @@ -111,19 +110,22 @@ impl TryFrom<&str> for Instruction { } } -pub fn main(filename: &str) -> Result<()> { - let mut line_reader = line_reader_for_file(filename)?.peekable(); +fn main() { + let args: Vec = env::args().collect(); - let first_line = line_reader.peek().unwrap().as_ref().unwrap(); + let filename = args.get(1).expect("Missing filename argument"); + + let file_contents = fs::read_to_string(&filename).expect("Unable to read file"); + let mut lines = file_contents.lines().peekable(); + + let first_line = lines.peek().unwrap(); let number_of_stacks = (first_line.len() as f32 / 4.0).ceil() as usize; let mut part1_stacks = Stacks(vec![vec![]; number_of_stacks]); let mut part2_stacks = Stacks(vec![vec![]; number_of_stacks]); let mut state = State::StartingState; - for line in line_reader { - let line = line?; - + for line in lines { if line.is_empty() { assert!(state == State::StartingState); state = State::Instructions; @@ -146,7 +148,7 @@ pub fn main(filename: &str) -> Result<()> { } } State::Instructions => { - let instruction = Instruction::try_from(line.as_str()).unwrap(); + let instruction = Instruction::try_from(line).unwrap(); let _ = part1_stacks.part1_perform(&instruction); let _ = part2_stacks.part2_perform(&instruction); } @@ -163,6 +165,4 @@ pub fn main(filename: &str) -> Result<()> { "Part 2: tops of stacks: {}", part2_stacks.tops().collect::>().join("") ); - - Ok(()) }