[rs] Solve 2022_05 part 1
This commit is contained in:
parent
995f62b4e3
commit
fb4db29665
5 changed files with 574 additions and 0 deletions
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