From 2ba76bdc33f24ec1f96652da310e3557a76e0674 Mon Sep 17 00:00:00 2001 From: Ashhhleyyy Date: Mon, 5 Dec 2022 10:59:59 +0000 Subject: [PATCH] feat: day 5 (~20 mins) --- .aoc-cache/5.txt | 515 ++++++++++++++++++++++++++++++++++++++++++ src/bin/create_day.rs | 3 +- src/bin/day_5.rs | 91 ++++++++ 3 files changed, 607 insertions(+), 2 deletions(-) create mode 100644 .aoc-cache/5.txt create mode 100644 src/bin/day_5.rs diff --git a/.aoc-cache/5.txt b/.aoc-cache/5.txt new file mode 100644 index 0000000..22a2858 --- /dev/null +++ b/.aoc-cache/5.txt @@ -0,0 +1,515 @@ + [G] [W] [Q] +[Z] [Q] [M] [J] [F] +[V] [V] [S] [F] [N] [R] +[T] [F] [C] [H] [F] [W] [P] +[B] [L] [L] [J] [C] [V] [D] [V] +[J] [V] [F] [N] [T] [T] [C] [Z] [W] +[G] [R] [Q] [H] [Q] [W] [Z] [G] [B] +[R] [J] [S] [Z] [R] [S] [D] [L] [J] + 1 2 3 4 5 6 7 8 9 + +move 6 from 5 to 7 +move 2 from 9 to 1 +move 4 from 8 to 6 +move 1 from 8 to 1 +move 2 from 9 to 1 +move 1 from 6 to 1 +move 13 from 7 to 8 +move 1 from 2 to 8 +move 9 from 1 to 5 +move 1 from 3 to 8 +move 3 from 6 to 7 +move 4 from 4 to 1 +move 11 from 5 to 6 +move 6 from 6 to 9 +move 3 from 4 to 2 +move 7 from 8 to 6 +move 1 from 7 to 5 +move 1 from 4 to 3 +move 7 from 1 to 5 +move 2 from 2 to 7 +move 4 from 9 to 6 +move 1 from 3 to 6 +move 1 from 1 to 9 +move 1 from 3 to 6 +move 1 from 5 to 8 +move 4 from 6 to 7 +move 3 from 8 to 7 +move 7 from 5 to 7 +move 1 from 3 to 1 +move 1 from 2 to 6 +move 14 from 6 to 5 +move 2 from 5 to 2 +move 3 from 9 to 2 +move 6 from 2 to 9 +move 7 from 8 to 6 +move 7 from 7 to 3 +move 2 from 8 to 7 +move 6 from 3 to 7 +move 17 from 7 to 1 +move 1 from 3 to 1 +move 1 from 2 to 5 +move 4 from 5 to 6 +move 17 from 6 to 9 +move 7 from 9 to 4 +move 1 from 2 to 7 +move 2 from 5 to 4 +move 3 from 7 to 8 +move 7 from 5 to 2 +move 6 from 2 to 8 +move 8 from 9 to 6 +move 1 from 2 to 3 +move 8 from 4 to 9 +move 7 from 6 to 9 +move 18 from 1 to 7 +move 1 from 1 to 8 +move 2 from 6 to 9 +move 1 from 3 to 9 +move 1 from 4 to 6 +move 1 from 8 to 3 +move 1 from 3 to 1 +move 10 from 7 to 2 +move 9 from 8 to 4 +move 1 from 6 to 4 +move 2 from 7 to 8 +move 5 from 4 to 9 +move 17 from 9 to 5 +move 2 from 7 to 6 +move 5 from 9 to 7 +move 5 from 4 to 2 +move 8 from 2 to 4 +move 8 from 4 to 3 +move 2 from 6 to 5 +move 2 from 8 to 5 +move 3 from 9 to 3 +move 4 from 7 to 3 +move 6 from 9 to 6 +move 4 from 6 to 9 +move 5 from 9 to 3 +move 8 from 5 to 2 +move 1 from 1 to 9 +move 1 from 6 to 3 +move 1 from 9 to 4 +move 5 from 7 to 4 +move 19 from 3 to 1 +move 4 from 2 to 8 +move 13 from 5 to 1 +move 1 from 6 to 3 +move 3 from 3 to 6 +move 2 from 8 to 9 +move 4 from 2 to 9 +move 2 from 2 to 6 +move 1 from 1 to 6 +move 5 from 1 to 9 +move 10 from 9 to 3 +move 15 from 1 to 6 +move 21 from 6 to 2 +move 20 from 2 to 1 +move 2 from 8 to 9 +move 28 from 1 to 2 +move 6 from 4 to 6 +move 2 from 1 to 5 +move 3 from 3 to 4 +move 2 from 5 to 4 +move 1 from 4 to 3 +move 3 from 4 to 5 +move 2 from 5 to 4 +move 1 from 1 to 8 +move 25 from 2 to 9 +move 1 from 4 to 6 +move 1 from 3 to 8 +move 4 from 3 to 6 +move 1 from 4 to 9 +move 2 from 6 to 3 +move 1 from 5 to 9 +move 5 from 2 to 8 +move 7 from 9 to 6 +move 2 from 9 to 4 +move 3 from 2 to 1 +move 3 from 3 to 4 +move 1 from 3 to 5 +move 16 from 6 to 3 +move 7 from 8 to 3 +move 5 from 4 to 3 +move 1 from 1 to 3 +move 1 from 2 to 6 +move 1 from 5 to 6 +move 21 from 3 to 5 +move 2 from 1 to 2 +move 1 from 6 to 7 +move 10 from 9 to 8 +move 1 from 6 to 5 +move 5 from 8 to 7 +move 12 from 5 to 3 +move 20 from 3 to 6 +move 4 from 7 to 9 +move 1 from 7 to 3 +move 1 from 2 to 5 +move 1 from 3 to 8 +move 2 from 8 to 4 +move 4 from 8 to 7 +move 3 from 6 to 1 +move 1 from 1 to 5 +move 2 from 9 to 2 +move 2 from 1 to 5 +move 2 from 5 to 6 +move 3 from 7 to 1 +move 2 from 1 to 4 +move 4 from 6 to 8 +move 3 from 4 to 7 +move 3 from 2 to 5 +move 2 from 7 to 9 +move 9 from 9 to 8 +move 1 from 4 to 1 +move 7 from 5 to 7 +move 1 from 7 to 8 +move 1 from 3 to 1 +move 4 from 7 to 5 +move 2 from 1 to 9 +move 1 from 1 to 2 +move 5 from 5 to 4 +move 1 from 2 to 6 +move 5 from 7 to 9 +move 5 from 4 to 7 +move 11 from 9 to 6 +move 14 from 8 to 9 +move 23 from 6 to 5 +move 6 from 9 to 5 +move 1 from 6 to 2 +move 10 from 5 to 3 +move 1 from 4 to 9 +move 1 from 2 to 1 +move 2 from 7 to 3 +move 10 from 5 to 7 +move 8 from 5 to 2 +move 5 from 3 to 5 +move 7 from 5 to 8 +move 1 from 2 to 7 +move 9 from 7 to 9 +move 3 from 2 to 3 +move 2 from 6 to 2 +move 2 from 3 to 6 +move 4 from 7 to 5 +move 1 from 1 to 5 +move 4 from 3 to 1 +move 2 from 5 to 2 +move 1 from 3 to 2 +move 2 from 6 to 8 +move 7 from 5 to 3 +move 9 from 2 to 4 +move 2 from 1 to 2 +move 2 from 5 to 3 +move 1 from 4 to 9 +move 1 from 6 to 9 +move 1 from 4 to 2 +move 2 from 1 to 7 +move 3 from 2 to 6 +move 4 from 8 to 7 +move 2 from 8 to 3 +move 2 from 3 to 7 +move 1 from 6 to 5 +move 2 from 8 to 2 +move 5 from 4 to 1 +move 8 from 9 to 8 +move 1 from 5 to 7 +move 10 from 9 to 2 +move 8 from 8 to 2 +move 1 from 1 to 6 +move 12 from 3 to 9 +move 7 from 7 to 4 +move 13 from 2 to 4 +move 7 from 2 to 7 +move 1 from 6 to 7 +move 3 from 9 to 8 +move 2 from 6 to 3 +move 1 from 3 to 2 +move 1 from 3 to 9 +move 3 from 1 to 5 +move 1 from 1 to 6 +move 4 from 7 to 6 +move 5 from 7 to 1 +move 1 from 2 to 1 +move 6 from 9 to 4 +move 5 from 9 to 7 +move 3 from 8 to 3 +move 22 from 4 to 9 +move 24 from 9 to 8 +move 1 from 9 to 2 +move 2 from 4 to 3 +move 10 from 8 to 3 +move 1 from 2 to 1 +move 1 from 3 to 8 +move 1 from 6 to 3 +move 1 from 1 to 4 +move 4 from 3 to 4 +move 4 from 6 to 1 +move 2 from 4 to 5 +move 4 from 7 to 2 +move 7 from 4 to 6 +move 4 from 6 to 1 +move 2 from 6 to 3 +move 1 from 6 to 2 +move 5 from 5 to 2 +move 12 from 3 to 5 +move 3 from 7 to 8 +move 6 from 2 to 3 +move 11 from 1 to 9 +move 1 from 1 to 7 +move 1 from 7 to 5 +move 2 from 3 to 9 +move 2 from 9 to 7 +move 4 from 2 to 5 +move 2 from 7 to 1 +move 17 from 8 to 1 +move 1 from 3 to 2 +move 16 from 1 to 3 +move 8 from 3 to 4 +move 2 from 8 to 3 +move 2 from 1 to 5 +move 1 from 2 to 6 +move 12 from 5 to 8 +move 1 from 6 to 3 +move 9 from 3 to 9 +move 8 from 4 to 6 +move 2 from 1 to 6 +move 6 from 8 to 4 +move 3 from 4 to 6 +move 1 from 1 to 9 +move 11 from 6 to 8 +move 3 from 4 to 3 +move 17 from 9 to 5 +move 2 from 6 to 7 +move 1 from 9 to 1 +move 2 from 8 to 6 +move 1 from 7 to 5 +move 1 from 8 to 9 +move 1 from 1 to 7 +move 3 from 9 to 6 +move 2 from 7 to 8 +move 1 from 9 to 6 +move 15 from 5 to 2 +move 9 from 3 to 9 +move 11 from 8 to 3 +move 6 from 9 to 8 +move 4 from 6 to 7 +move 3 from 3 to 7 +move 5 from 5 to 6 +move 7 from 7 to 5 +move 3 from 6 to 1 +move 2 from 1 to 4 +move 1 from 9 to 2 +move 2 from 9 to 3 +move 2 from 6 to 3 +move 1 from 1 to 8 +move 6 from 5 to 9 +move 8 from 2 to 5 +move 10 from 8 to 5 +move 1 from 2 to 9 +move 21 from 5 to 9 +move 2 from 8 to 4 +move 5 from 9 to 1 +move 2 from 5 to 2 +move 15 from 9 to 2 +move 1 from 5 to 9 +move 9 from 9 to 3 +move 1 from 1 to 6 +move 3 from 4 to 1 +move 20 from 3 to 5 +move 20 from 5 to 4 +move 7 from 4 to 3 +move 1 from 1 to 7 +move 11 from 4 to 5 +move 4 from 3 to 2 +move 11 from 5 to 4 +move 2 from 6 to 7 +move 4 from 3 to 9 +move 2 from 2 to 8 +move 2 from 9 to 4 +move 6 from 4 to 6 +move 2 from 7 to 9 +move 1 from 7 to 6 +move 1 from 4 to 9 +move 4 from 4 to 6 +move 2 from 8 to 6 +move 1 from 4 to 3 +move 1 from 4 to 6 +move 1 from 3 to 1 +move 3 from 4 to 3 +move 9 from 2 to 8 +move 2 from 3 to 7 +move 5 from 6 to 2 +move 2 from 7 to 5 +move 1 from 5 to 2 +move 1 from 9 to 3 +move 1 from 5 to 1 +move 13 from 2 to 5 +move 4 from 9 to 5 +move 1 from 3 to 4 +move 9 from 2 to 3 +move 7 from 3 to 2 +move 11 from 5 to 6 +move 5 from 8 to 7 +move 1 from 3 to 1 +move 2 from 8 to 5 +move 2 from 8 to 1 +move 1 from 4 to 1 +move 6 from 2 to 7 +move 3 from 5 to 3 +move 1 from 2 to 5 +move 7 from 7 to 9 +move 3 from 3 to 5 +move 1 from 2 to 5 +move 2 from 3 to 2 +move 6 from 1 to 7 +move 10 from 7 to 3 +move 1 from 2 to 3 +move 6 from 9 to 8 +move 1 from 2 to 4 +move 2 from 6 to 1 +move 5 from 1 to 9 +move 8 from 5 to 8 +move 2 from 1 to 6 +move 6 from 3 to 4 +move 1 from 5 to 3 +move 4 from 9 to 6 +move 1 from 1 to 4 +move 2 from 9 to 2 +move 5 from 6 to 1 +move 11 from 6 to 7 +move 1 from 2 to 8 +move 6 from 7 to 5 +move 10 from 8 to 4 +move 2 from 3 to 9 +move 3 from 3 to 5 +move 4 from 7 to 9 +move 2 from 1 to 3 +move 10 from 5 to 8 +move 6 from 6 to 1 +move 2 from 6 to 8 +move 2 from 9 to 5 +move 4 from 9 to 6 +move 7 from 4 to 8 +move 5 from 6 to 1 +move 4 from 8 to 2 +move 2 from 5 to 6 +move 5 from 4 to 5 +move 1 from 7 to 5 +move 2 from 3 to 6 +move 1 from 3 to 8 +move 4 from 6 to 1 +move 4 from 2 to 3 +move 5 from 5 to 1 +move 2 from 3 to 2 +move 2 from 3 to 2 +move 20 from 8 to 2 +move 5 from 4 to 8 +move 1 from 4 to 3 +move 8 from 2 to 1 +move 1 from 5 to 6 +move 5 from 2 to 3 +move 1 from 6 to 5 +move 5 from 3 to 2 +move 1 from 3 to 7 +move 6 from 8 to 5 +move 13 from 2 to 9 +move 7 from 9 to 8 +move 1 from 7 to 8 +move 5 from 8 to 3 +move 2 from 2 to 5 +move 2 from 8 to 4 +move 27 from 1 to 5 +move 1 from 2 to 3 +move 5 from 3 to 1 +move 22 from 5 to 7 +move 1 from 8 to 5 +move 1 from 3 to 2 +move 7 from 1 to 3 +move 2 from 3 to 7 +move 2 from 2 to 4 +move 5 from 9 to 1 +move 5 from 3 to 9 +move 3 from 1 to 5 +move 3 from 1 to 6 +move 3 from 6 to 3 +move 4 from 4 to 2 +move 8 from 5 to 3 +move 8 from 7 to 4 +move 14 from 7 to 4 +move 1 from 1 to 7 +move 6 from 9 to 6 +move 7 from 5 to 3 +move 14 from 3 to 6 +move 2 from 2 to 1 +move 4 from 3 to 7 +move 6 from 7 to 6 +move 1 from 7 to 6 +move 1 from 5 to 1 +move 2 from 1 to 5 +move 3 from 5 to 7 +move 8 from 6 to 5 +move 5 from 5 to 1 +move 1 from 7 to 3 +move 1 from 3 to 8 +move 22 from 4 to 7 +move 7 from 6 to 3 +move 4 from 3 to 2 +move 3 from 1 to 3 +move 17 from 7 to 6 +move 1 from 8 to 1 +move 2 from 2 to 4 +move 3 from 7 to 2 +move 2 from 2 to 9 +move 1 from 1 to 8 +move 2 from 3 to 1 +move 6 from 6 to 8 +move 2 from 9 to 2 +move 4 from 5 to 1 +move 5 from 8 to 9 +move 1 from 7 to 3 +move 4 from 3 to 4 +move 1 from 7 to 4 +move 4 from 9 to 7 +move 5 from 7 to 9 +move 1 from 7 to 3 +move 2 from 2 to 8 +move 5 from 4 to 2 +move 21 from 6 to 8 +move 2 from 3 to 8 +move 23 from 8 to 6 +move 1 from 2 to 6 +move 2 from 9 to 8 +move 22 from 6 to 7 +move 2 from 9 to 3 +move 2 from 3 to 7 +move 2 from 1 to 6 +move 1 from 2 to 5 +move 3 from 1 to 3 +move 6 from 7 to 4 +move 5 from 8 to 5 +move 1 from 3 to 8 +move 1 from 9 to 3 +move 6 from 4 to 8 +move 1 from 5 to 3 +move 6 from 2 to 8 +move 15 from 7 to 5 +move 1 from 7 to 1 +move 14 from 5 to 8 +move 1 from 4 to 9 +move 5 from 1 to 7 +move 3 from 6 to 2 +move 4 from 5 to 6 +move 1 from 4 to 8 +move 4 from 3 to 1 +move 2 from 9 to 2 +move 7 from 7 to 1 +move 7 from 2 to 7 +move 9 from 8 to 6 +move 7 from 7 to 1 +move 12 from 6 to 8 +move 25 from 8 to 6 +move 3 from 8 to 1 +move 28 from 6 to 2 +move 15 from 2 to 3 +move 1 from 5 to 4 +move 3 from 2 to 7 +move 6 from 2 to 9 diff --git a/src/bin/create_day.rs b/src/bin/create_day.rs index b1cd2a3..675e98b 100644 --- a/src/bin/create_day.rs +++ b/src/bin/create_day.rs @@ -2,8 +2,7 @@ use std::path::Path; use color_eyre::{Result, eyre::bail}; -const TEMPLATE: &str = r#" -use aoc_2022::prelude::*; +const TEMPLATE: &str = r#"use aoc_2022::prelude::*; type Input = (); diff --git a/src/bin/day_5.rs b/src/bin/day_5.rs new file mode 100644 index 0000000..5485882 --- /dev/null +++ b/src/bin/day_5.rs @@ -0,0 +1,91 @@ +use aoc_2022::prelude::*; +use regex::Regex; + +struct Input { + piles: Vec>, + moves: Vec<(usize, usize, usize)>, +} + +fn parse(s: &str) -> Result { + // [G] [W] [Q] + // [Z] [Q] [M] [J] [F] + // [V] [V] [S] [F] [N] [R] + // [T] [F] [C] [H] [F] [W] [P] + // [B] [L] [L] [J] [C] [V] [D] [V] + // [J] [V] [F] [N] [T] [T] [C] [Z] [W] + // [G] [R] [Q] [H] [Q] [W] [Z] [G] [B] + // [R] [J] [S] [Z] [R] [S] [D] [L] [J] + // 1 2 3 4 5 6 7 8 9 + + let crate_stacks = &[ + "RGJBTVZ", "JRVL", "SQF", "ZHNLFVQG", "RQTJCSMW", "SWTCHF", "DZCVFNJ", "LGZDWRFQ", "JBWVP", + ]; + + let mut piles = vec![]; + + for stack in crate_stacks { + let stack = stack.chars().collect::>(); + piles.push(stack); + } + + let mut read_header = false; + let re = Regex::new("move ([0-9]+) from ([0-9]+) to ([0-9]+)")?; + let mut moves = vec![]; + for line in s.lines() { + if !read_header { + if line == "" { + read_header = true; + } + } else { + let caps = re.captures(line).unwrap(); + let amount = caps.get(1).unwrap().as_str().parse::()?; + let from = caps.get(2).unwrap().as_str().parse::()?; + let to = caps.get(3).unwrap().as_str().parse::()?; + moves.push((amount, from, to)); + } + } + + Ok(Input { piles, moves }) +} + +#[aoc(day = 5, parse = parse)] +fn day_5(input: Input) -> Result<()> { + // Part 1 + let mut piles = input.piles.clone(); + for (amount, from, to) in &input.moves { + for _ in 0..*amount { + let pile = &mut piles[*from - 1]; + let item = pile.remove(pile.len() - 1); + piles[*to - 1].push(item); + } + } + + print!("Part one: "); + for pile in piles { + print!("{}", pile[pile.len() - 1]); + } + println!(); + + // Part 2 + let mut piles = input.piles.clone(); + for (amount, from, to) in &input.moves { + let mut moving = vec![]; + for _ in 0..*amount { + let pile = &mut piles[*from - 1]; + let item = pile.remove(pile.len() - 1); + moving.push(item); + } + moving.reverse(); + for item in moving { + piles[*to - 1].push(item); + } + } + + print!("Part two: "); + for pile in piles { + print!("{}", pile[pile.len() - 1]); + } + println!(); + + Ok(()) +}