fn main() { part1(); part2(); } fn part1() { let input = include_str!("../input"); let mut split = input.split("\n\n"); let start_state = split.next().unwrap(); let mut state: Vec> = vec![vec![]; 9]; for line in start_state.lines() { let mut index = 1; let mut i = 0; while index < line.len() { let c = line.chars().nth(index).unwrap(); if c.is_ascii_uppercase() { state[i].push(c); } index += 4; i += 1; } } for s in state.iter_mut() { s.reverse(); } println!("{:?}", state); let instructions: Vec> = split .next() .unwrap() .lines() .map(|line| { line.split(" ") .flat_map(|w| w.parse::()) .collect::>() }) .collect(); for instr in instructions { let amt = instr[0]; let src = instr[1]; let dst = instr[2]; for _ in 0..amt { let c = state[src - 1].pop().unwrap(); state[dst - 1].push(c); } } for s in state { print!("{}", s.last().unwrap()); } println!(); } fn part2() { let input = include_str!("../input"); let mut split = input.split("\n\n"); let start_state = split.next().unwrap(); let mut state: Vec> = vec![vec![]; 9]; for line in start_state.lines() { let mut index = 1; let mut i = 0; while index < line.len() { let c = line.chars().nth(index).unwrap(); if c.is_ascii_uppercase() { state[i].push(c); } index += 4; i += 1; } } for s in state.iter_mut() { s.reverse(); } let instructions: Vec> = split .next() .unwrap() .lines() .map(|line| { line.split(" ") .flat_map(|w| w.parse::()) .collect::>() }) .collect(); for instr in instructions { let amt = instr[0]; let src = instr[1]; let dst = instr[2]; let mut stack = vec![]; for _ in 0..amt { let c = state[src - 1].pop().unwrap(); stack.push(c); } for _ in 0..amt { state[dst - 1].push(stack.pop().unwrap()); } } for s in state { print!("{}", s.last().unwrap()); } println!(); }