[rs] Solve 2022_05 part 1

This commit is contained in:
Joscha 2022-12-05 09:09:05 +01:00
parent 995f62b4e3
commit fb4db29665
5 changed files with 574 additions and 0 deletions

View file

@ -41,6 +41,7 @@ days! {
Y2022D02: "2022_02",
Y2022D03: "2022_03",
Y2022D04: "2022_04",
Y2022D05: "2022_05",
}
#[derive(Parser)]
@ -68,6 +69,7 @@ fn main() -> io::Result<()> {
Day::Y2022D02 => y2022::d02::solve(input),
Day::Y2022D03 => y2022::d03::solve(input),
Day::Y2022D04 => y2022::d04::solve(input),
Day::Y2022D05 => y2022::d05::solve(input),
}
println!()
}

View file

@ -2,3 +2,4 @@ pub mod d01;
pub mod d02;
pub mod d03;
pub mod d04;
pub mod d05;

48
rs/src/y2022/d05.rs Normal file
View file

@ -0,0 +1,48 @@
fn parse_stack_line(line: &str, stacks: &mut Vec<Vec<char>>) {
let len = (line.len() + 1) / 4;
while stacks.len() < len {
stacks.push(vec![]);
}
let line = line.chars().collect::<Vec<_>>();
for (i, chunk) in line[..].chunks(4).enumerate() {
if chunk[0] == '[' {
stacks[i].push(chunk[1]);
}
}
}
pub fn solve(input: String) {
// Parse stacks
let mut stacks = vec![];
let mut lines = input.lines();
for line in &mut lines {
if line.is_empty() {
break;
}
parse_stack_line(line, &mut stacks);
}
for stack in &mut stacks {
stack.reverse();
}
// Parse moves
let mut moves: Vec<(usize, usize, usize)> = vec![];
for line in lines {
let parts = line.split_ascii_whitespace().collect::<Vec<_>>();
let amount = parts[1].parse().unwrap();
let from = parts[3].parse().unwrap();
let to = parts[5].parse().unwrap();
moves.push((amount, from, to));
}
// Part 1
let mut part1 = stacks.clone();
for (amount, from, to) in moves {
for _ in 0..amount {
let value = part1[from - 1].pop().unwrap();
part1[to - 1].push(value);
}
}
let part1 = part1.iter().map(|s| s.last().unwrap()).collect::<String>();
println!("Part 1: {}", part1);
}