#[path = "../lib.rs"] mod lib; fn get_int(line: &str, i: usize) -> Option { let s = line.split(' ').nth(i)?; return s.parse::().ok(); } fn run(label: &str, reverse: bool) { let mut stacks: Vec> = vec![]; let mut init = false; for line in lib::iter_input() { if !init { if line.len() == 0 { init = true; } else { while stacks.len() * 4 < line.len() + 1 { stacks.push(vec![]); } for i in 0..stacks.len() { let c = line.chars().nth(i * 4 + 1).unwrap(); if c != ' ' { stacks[i].insert(0, c); } } } } else { let k = get_int(&line, 1).unwrap(); let a = get_int(&line, 3).unwrap(); let b = get_int(&line, 5).unwrap(); if reverse { for _ in 0..k { let c = stacks[a - 1].pop().unwrap(); stacks[b - 1].push(c); } } else { let mut tmp = vec![]; for _ in 0..k { let c = stacks[a - 1].pop().unwrap(); tmp.push(c); } while tmp.len() > 0 { let c = tmp.pop().unwrap(); stacks[b - 1].push(c); } } } } print!("{}: ", label); for stack in stacks { print!("{}", stack.last().unwrap()); } print!("\n"); } fn main() { run("part1", true); run("part2", false); }