Skip to content

Commit

Permalink
advent_of_code 2022-5: part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
msyfls123 committed Jun 2, 2023
1 parent 81eb289 commit 0d87ca5
Showing 1 changed file with 42 additions and 4 deletions.
46 changes: 42 additions & 4 deletions advent_of_code/src/aoc2022/5.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ fn test_create_procedure() {
assert_eq!(procedure, expected);
}

#[derive(Debug, PartialEq, Eq)]
#[derive(Debug, PartialEq, Eq, Clone)]
struct Supply {
stacks: Vec<Stack>
}
Expand Down Expand Up @@ -91,6 +91,14 @@ impl Supply {
}
}

fn retain(&mut self, procedure: &Procedure) {
let Procedure { count, from, to } = procedure.to_owned();

let index = self.stacks[*from].len() - count;
let mut moved = self.stacks[*from].split_off(index);
self.stacks[*to].append(&mut moved);
}

fn get_top_crates(&self) -> String {
self.stacks.iter().filter_map(|stack| stack.last()).collect()
}
Expand Down Expand Up @@ -134,14 +142,44 @@ fn test_rearrange() {
assert_eq!(supply, expected);
}

#[test]
fn test_retain() {
let data = split_lines(r#"[D]
[N] [C]
[Z] [M] [P]
1 2 3"#);
let mut supply = Supply::from_lines(&data);
let procedure = Procedure::from_text(&String::from("move 3 from 1 to 3"));
let expected = Supply {
stacks: vec!{
vec!{},
vec!{},
vec!{'M', 'C'},
vec!{'P', 'Z', 'N', 'D'},
}
};
supply.retain(&procedure);
assert_eq!(supply, expected);
}

fn main() {
let data = get_group_str_from_file(&vec!{"aoc2022", "data", "5.txt"});
let mut supply = Supply::from_lines(&data[0]);
let supply = Supply::from_lines(&data[0]);
let procedures: Vec<Procedure> = data[1].iter().map(|line| Procedure::from_text(&line)).collect();

let mut supply1 = supply.clone();

for procedure in &procedures {
supply1.rearrange(&procedure);
}

println!("Part 1: {}", supply1.get_top_crates());

let mut supply2 = supply.clone();

for procedure in procedures {
supply.rearrange(&procedure);
supply2.retain(&procedure);
}

println!("Part 1: {}", supply.get_top_crates());
println!("Part 2: {}", supply2.get_top_crates());
}

0 comments on commit 0d87ca5

Please sign in to comment.