From 2224aff7ac1e85ab387e8a9b93ea8ee0a1a7f7bc Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Sun, 4 Dec 2022 23:41:18 -0800 Subject: [PATCH] Support arbitrary number of stacks --- 2022/src/bin/day05.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/2022/src/bin/day05.rs b/2022/src/bin/day05.rs index 22aa01c..823c80f 100644 --- a/2022/src/bin/day05.rs +++ b/2022/src/bin/day05.rs @@ -18,14 +18,16 @@ struct Ship { impl Ship { fn parse(input: &str) -> Self { - let lines: Vec<&str> = input.trim().split('\n').rev().collect(); + let lines: Vec<&str> = input.trim_end().split('\n').rev().collect(); + + let num_stacks = lines[0].split(" ").count(); let mut ship = Ship { - stacks: (0..=8).map(|_| Vec::new()).collect(), + stacks: (0..num_stacks).map(|_| Vec::new()).collect(), }; for line in &lines[1..] { - for stk in 0..=8 { + for stk in 0..num_stacks { let i = 4 * stk + 1; let contents = match line.get(i..i + 1) { None => continue, @@ -85,7 +87,13 @@ fn part1(input: &str) -> String { let sections: Vec<&str> = input.split("\n\n").collect(); let mut ship = Ship::parse(sections[0]); - let moves: Vec = sections[1].trim().split('\n').map(Move::parse).collect(); + let moves: Vec = sections[1] + .trim_end() + .split('\n') + .map(Move::parse) + .collect(); + + dbg!(&ship); for m in moves { ship.do_move_1(m); @@ -98,7 +106,11 @@ fn part2(input: &str) -> String { let sections: Vec<&str> = input.split("\n\n").collect(); let mut ship = Ship::parse(sections[0]); - let moves: Vec = sections[1].trim().split('\n').map(Move::parse).collect(); + let moves: Vec = sections[1] + .trim_end() + .split('\n') + .map(Move::parse) + .collect(); for m in moves { ship.do_move_2(m);