[rs] Solve 2022_05 part 1
This commit is contained in:
parent
995f62b4e3
commit
fb4db29665
5 changed files with 574 additions and 0 deletions
|
|
@ -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!()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
48
rs/src/y2022/d05.rs
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue