From 8d2702704996dd1520c26a9e874f1c2a7a4104ce Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Wed, 7 Dec 2022 22:19:28 -0800 Subject: [PATCH] In progress, parsing of the Dock is complete --- Cargo.toml | 2 +- etc/p05.txt | 513 +++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/p05.rs | 105 ++++++++++ 3 files changed, 619 insertions(+), 1 deletion(-) create mode 100644 etc/p05.txt create mode 100644 src/bin/p05.rs diff --git a/Cargo.toml b/Cargo.toml index 944df73..3b1d557 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "aoc-vv" version = "0.1.0" edition = "2021" -default-run = "p04" +default-run = "p05" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/etc/p05.txt b/etc/p05.txt new file mode 100644 index 0000000..c6ab421 --- /dev/null +++ b/etc/p05.txt @@ -0,0 +1,513 @@ +[H] [Z] [J] +[L] [W] [B] [G] [R] +[R] [G] [S] [J] [H] [Q] +[F] [N] [T] [J] [P] [R] [F] +[B] [C] [M] [R] [Q] [F] [G] [P] +[C] [D] [F] [D] [D] [D] [T] [M] [G] +[J] [C] [J] [J] [C] [L] [Z] [V] [B] +[M] [Z] [H] [P] [N] [W] [P] [L] [C] + 1 2 3 4 5 6 7 8 9 + +move 3 from 2 to 1 +move 8 from 6 to 4 +move 4 from 8 to 2 +move 3 from 1 to 9 +move 1 from 2 to 4 +move 3 from 7 to 5 +move 3 from 9 to 2 +move 3 from 3 to 5 +move 1 from 5 to 1 +move 5 from 1 to 8 +move 2 from 1 to 8 +move 3 from 7 to 3 +move 1 from 8 to 9 +move 6 from 9 to 8 +move 3 from 8 to 7 +move 7 from 8 to 9 +move 2 from 5 to 9 +move 2 from 2 to 9 +move 3 from 3 to 7 +move 2 from 8 to 3 +move 7 from 4 to 8 +move 3 from 4 to 1 +move 4 from 8 to 6 +move 4 from 6 to 1 +move 8 from 1 to 2 +move 1 from 1 to 4 +move 3 from 5 to 1 +move 8 from 9 to 8 +move 4 from 3 to 1 +move 5 from 5 to 3 +move 2 from 7 to 1 +move 1 from 7 to 4 +move 1 from 7 to 2 +move 3 from 3 to 5 +move 3 from 9 to 1 +move 9 from 8 to 1 +move 2 from 9 to 7 +move 1 from 8 to 5 +move 4 from 5 to 3 +move 1 from 3 to 4 +move 1 from 9 to 6 +move 1 from 6 to 9 +move 7 from 4 to 9 +move 1 from 7 to 3 +move 1 from 8 to 2 +move 8 from 2 to 1 +move 4 from 3 to 5 +move 2 from 9 to 6 +move 2 from 6 to 2 +move 2 from 4 to 9 +move 8 from 9 to 2 +move 3 from 7 to 9 +move 1 from 3 to 5 +move 2 from 3 to 8 +move 9 from 2 to 1 +move 1 from 8 to 7 +move 4 from 2 to 9 +move 4 from 5 to 6 +move 1 from 8 to 9 +move 27 from 1 to 2 +move 1 from 6 to 4 +move 3 from 6 to 4 +move 7 from 9 to 8 +move 4 from 4 to 1 +move 9 from 2 to 6 +move 2 from 1 to 9 +move 6 from 1 to 3 +move 1 from 5 to 3 +move 3 from 3 to 5 +move 3 from 5 to 3 +move 3 from 3 to 1 +move 4 from 6 to 7 +move 3 from 9 to 2 +move 1 from 6 to 4 +move 4 from 3 to 5 +move 3 from 6 to 5 +move 1 from 6 to 2 +move 15 from 2 to 3 +move 5 from 5 to 9 +move 13 from 3 to 9 +move 2 from 5 to 7 +move 1 from 4 to 2 +move 3 from 3 to 7 +move 11 from 2 to 7 +move 7 from 9 to 5 +move 3 from 5 to 7 +move 6 from 8 to 9 +move 4 from 1 to 2 +move 6 from 1 to 6 +move 3 from 5 to 1 +move 1 from 8 to 2 +move 4 from 2 to 9 +move 1 from 5 to 7 +move 6 from 7 to 6 +move 18 from 7 to 5 +move 1 from 7 to 1 +move 8 from 9 to 5 +move 1 from 2 to 6 +move 15 from 5 to 6 +move 6 from 5 to 3 +move 4 from 3 to 6 +move 26 from 6 to 5 +move 2 from 1 to 7 +move 4 from 5 to 9 +move 8 from 5 to 7 +move 3 from 7 to 9 +move 14 from 9 to 8 +move 7 from 5 to 2 +move 4 from 2 to 1 +move 5 from 1 to 9 +move 12 from 5 to 3 +move 5 from 8 to 5 +move 14 from 3 to 2 +move 1 from 5 to 2 +move 10 from 2 to 6 +move 7 from 9 to 6 +move 6 from 8 to 6 +move 1 from 2 to 7 +move 2 from 9 to 7 +move 2 from 8 to 6 +move 6 from 2 to 7 +move 1 from 1 to 8 +move 15 from 6 to 2 +move 1 from 6 to 9 +move 1 from 5 to 9 +move 1 from 9 to 6 +move 2 from 2 to 4 +move 3 from 9 to 5 +move 5 from 5 to 3 +move 3 from 3 to 6 +move 6 from 2 to 7 +move 1 from 5 to 9 +move 8 from 6 to 9 +move 2 from 6 to 7 +move 3 from 2 to 4 +move 9 from 6 to 7 +move 17 from 7 to 5 +move 1 from 8 to 4 +move 7 from 9 to 3 +move 12 from 5 to 8 +move 3 from 5 to 2 +move 4 from 7 to 8 +move 2 from 5 to 7 +move 1 from 7 to 9 +move 8 from 3 to 7 +move 17 from 7 to 5 +move 3 from 2 to 5 +move 1 from 3 to 6 +move 10 from 5 to 4 +move 5 from 2 to 7 +move 1 from 4 to 2 +move 3 from 9 to 8 +move 7 from 7 to 2 +move 5 from 5 to 1 +move 14 from 4 to 9 +move 3 from 9 to 8 +move 1 from 6 to 9 +move 2 from 1 to 4 +move 2 from 8 to 5 +move 16 from 8 to 6 +move 1 from 6 to 2 +move 11 from 9 to 2 +move 2 from 7 to 5 +move 1 from 1 to 6 +move 11 from 2 to 9 +move 4 from 2 to 8 +move 9 from 5 to 3 +move 1 from 4 to 2 +move 2 from 1 to 8 +move 1 from 2 to 9 +move 2 from 4 to 3 +move 8 from 6 to 9 +move 16 from 9 to 3 +move 16 from 3 to 2 +move 17 from 2 to 6 +move 1 from 9 to 3 +move 1 from 2 to 5 +move 1 from 9 to 4 +move 3 from 2 to 8 +move 1 from 9 to 1 +move 1 from 9 to 6 +move 7 from 3 to 1 +move 5 from 3 to 5 +move 3 from 8 to 3 +move 2 from 3 to 4 +move 6 from 8 to 4 +move 7 from 6 to 4 +move 3 from 6 to 7 +move 3 from 8 to 9 +move 3 from 5 to 2 +move 3 from 1 to 3 +move 1 from 4 to 8 +move 3 from 5 to 1 +move 13 from 4 to 7 +move 14 from 6 to 7 +move 6 from 1 to 9 +move 3 from 9 to 6 +move 1 from 8 to 7 +move 1 from 8 to 7 +move 20 from 7 to 3 +move 1 from 8 to 9 +move 1 from 1 to 9 +move 1 from 1 to 5 +move 1 from 4 to 6 +move 14 from 3 to 9 +move 1 from 2 to 6 +move 3 from 7 to 6 +move 6 from 3 to 2 +move 1 from 3 to 8 +move 2 from 7 to 3 +move 7 from 6 to 3 +move 12 from 3 to 1 +move 1 from 8 to 2 +move 1 from 4 to 9 +move 1 from 5 to 6 +move 1 from 6 to 4 +move 1 from 4 to 2 +move 2 from 2 to 3 +move 16 from 9 to 7 +move 3 from 6 to 7 +move 6 from 9 to 4 +move 4 from 4 to 7 +move 6 from 1 to 8 +move 2 from 3 to 6 +move 3 from 1 to 9 +move 3 from 2 to 3 +move 3 from 3 to 8 +move 5 from 2 to 8 +move 2 from 7 to 8 +move 3 from 1 to 5 +move 1 from 4 to 3 +move 2 from 9 to 8 +move 1 from 6 to 8 +move 2 from 9 to 1 +move 15 from 7 to 1 +move 1 from 6 to 5 +move 10 from 1 to 5 +move 1 from 4 to 1 +move 2 from 1 to 6 +move 9 from 7 to 8 +move 27 from 8 to 3 +move 1 from 6 to 1 +move 1 from 8 to 5 +move 5 from 5 to 6 +move 12 from 3 to 1 +move 3 from 7 to 1 +move 7 from 5 to 1 +move 1 from 6 to 4 +move 3 from 6 to 9 +move 1 from 4 to 2 +move 2 from 6 to 5 +move 1 from 7 to 6 +move 1 from 9 to 2 +move 2 from 5 to 6 +move 2 from 6 to 5 +move 3 from 1 to 3 +move 19 from 3 to 1 +move 2 from 2 to 9 +move 42 from 1 to 7 +move 4 from 9 to 7 +move 1 from 6 to 8 +move 1 from 8 to 5 +move 2 from 1 to 9 +move 3 from 5 to 7 +move 27 from 7 to 4 +move 1 from 1 to 4 +move 3 from 9 to 2 +move 18 from 4 to 9 +move 2 from 5 to 3 +move 1 from 7 to 1 +move 2 from 3 to 4 +move 8 from 7 to 5 +move 15 from 9 to 3 +move 1 from 9 to 7 +move 3 from 7 to 2 +move 2 from 7 to 2 +move 2 from 5 to 3 +move 1 from 1 to 5 +move 1 from 9 to 1 +move 1 from 3 to 1 +move 1 from 4 to 3 +move 8 from 7 to 3 +move 8 from 2 to 4 +move 1 from 9 to 6 +move 23 from 3 to 9 +move 1 from 9 to 6 +move 2 from 6 to 8 +move 1 from 8 to 6 +move 1 from 5 to 3 +move 7 from 4 to 8 +move 7 from 5 to 7 +move 2 from 8 to 3 +move 1 from 1 to 8 +move 3 from 7 to 4 +move 5 from 4 to 3 +move 1 from 1 to 8 +move 3 from 3 to 1 +move 8 from 9 to 7 +move 3 from 8 to 4 +move 1 from 6 to 2 +move 5 from 8 to 7 +move 6 from 3 to 1 +move 1 from 2 to 9 +move 7 from 7 to 9 +move 4 from 1 to 9 +move 2 from 4 to 2 +move 1 from 4 to 9 +move 1 from 1 to 6 +move 8 from 4 to 8 +move 4 from 1 to 5 +move 3 from 5 to 2 +move 2 from 2 to 5 +move 2 from 5 to 6 +move 1 from 3 to 7 +move 2 from 6 to 4 +move 1 from 5 to 7 +move 1 from 6 to 9 +move 1 from 4 to 1 +move 6 from 9 to 2 +move 8 from 9 to 7 +move 4 from 7 to 3 +move 4 from 8 to 3 +move 3 from 8 to 3 +move 8 from 3 to 5 +move 1 from 1 to 7 +move 11 from 9 to 7 +move 5 from 2 to 7 +move 1 from 8 to 1 +move 3 from 2 to 3 +move 1 from 1 to 4 +move 1 from 2 to 5 +move 20 from 7 to 8 +move 7 from 7 to 9 +move 4 from 4 to 7 +move 3 from 9 to 4 +move 5 from 7 to 4 +move 7 from 4 to 7 +move 4 from 9 to 2 +move 1 from 4 to 3 +move 4 from 3 to 5 +move 2 from 5 to 8 +move 4 from 5 to 2 +move 5 from 2 to 6 +move 2 from 6 to 3 +move 22 from 8 to 5 +move 13 from 7 to 9 +move 11 from 9 to 3 +move 2 from 6 to 8 +move 7 from 3 to 1 +move 18 from 5 to 2 +move 1 from 6 to 4 +move 1 from 4 to 9 +move 2 from 8 to 5 +move 2 from 9 to 1 +move 9 from 3 to 1 +move 4 from 5 to 6 +move 2 from 6 to 7 +move 3 from 9 to 5 +move 10 from 5 to 8 +move 6 from 8 to 7 +move 3 from 8 to 1 +move 6 from 2 to 3 +move 1 from 9 to 6 +move 5 from 3 to 4 +move 4 from 1 to 4 +move 17 from 1 to 5 +move 12 from 2 to 7 +move 1 from 3 to 6 +move 16 from 5 to 8 +move 3 from 5 to 6 +move 9 from 8 to 3 +move 8 from 8 to 4 +move 7 from 4 to 1 +move 5 from 1 to 4 +move 4 from 3 to 7 +move 14 from 7 to 3 +move 6 from 4 to 8 +move 9 from 7 to 4 +move 5 from 6 to 1 +move 1 from 7 to 1 +move 1 from 6 to 7 +move 16 from 4 to 5 +move 1 from 4 to 2 +move 1 from 7 to 5 +move 2 from 1 to 7 +move 2 from 7 to 4 +move 4 from 1 to 6 +move 13 from 5 to 6 +move 5 from 6 to 3 +move 22 from 3 to 2 +move 1 from 4 to 7 +move 4 from 5 to 4 +move 1 from 7 to 6 +move 5 from 8 to 5 +move 2 from 3 to 1 +move 13 from 6 to 1 +move 6 from 1 to 4 +move 1 from 8 to 1 +move 6 from 1 to 4 +move 1 from 5 to 4 +move 7 from 4 to 7 +move 3 from 1 to 5 +move 2 from 5 to 7 +move 5 from 5 to 1 +move 8 from 7 to 4 +move 1 from 6 to 4 +move 1 from 7 to 4 +move 9 from 2 to 7 +move 8 from 7 to 6 +move 5 from 6 to 4 +move 1 from 7 to 4 +move 2 from 4 to 9 +move 2 from 6 to 1 +move 8 from 2 to 6 +move 9 from 1 to 8 +move 9 from 6 to 2 +move 1 from 1 to 8 +move 6 from 8 to 4 +move 2 from 9 to 7 +move 2 from 7 to 9 +move 15 from 2 to 8 +move 18 from 4 to 2 +move 14 from 4 to 5 +move 10 from 2 to 4 +move 9 from 2 to 6 +move 1 from 9 to 3 +move 1 from 3 to 1 +move 6 from 5 to 8 +move 3 from 4 to 9 +move 2 from 2 to 1 +move 1 from 1 to 6 +move 3 from 9 to 7 +move 22 from 8 to 6 +move 1 from 8 to 9 +move 2 from 1 to 5 +move 5 from 5 to 4 +move 2 from 5 to 8 +move 2 from 8 to 7 +move 1 from 9 to 7 +move 1 from 5 to 8 +move 1 from 9 to 8 +move 15 from 6 to 4 +move 2 from 5 to 2 +move 11 from 4 to 6 +move 5 from 4 to 1 +move 5 from 4 to 2 +move 2 from 1 to 5 +move 6 from 2 to 8 +move 11 from 6 to 3 +move 12 from 6 to 8 +move 1 from 3 to 9 +move 3 from 3 to 2 +move 6 from 4 to 2 +move 2 from 5 to 8 +move 5 from 7 to 2 +move 11 from 8 to 4 +move 1 from 7 to 4 +move 1 from 9 to 6 +move 7 from 2 to 1 +move 3 from 6 to 5 +move 2 from 5 to 3 +move 1 from 5 to 9 +move 3 from 4 to 9 +move 4 from 9 to 1 +move 4 from 3 to 6 +move 3 from 4 to 8 +move 3 from 8 to 9 +move 2 from 8 to 2 +move 9 from 8 to 7 +move 2 from 3 to 1 +move 2 from 3 to 2 +move 1 from 3 to 6 +move 2 from 9 to 1 +move 8 from 7 to 5 +move 7 from 2 to 7 +move 2 from 8 to 9 +move 4 from 6 to 5 +move 13 from 1 to 5 +move 4 from 1 to 8 +move 3 from 9 to 3 +move 12 from 5 to 9 +move 3 from 8 to 9 +move 1 from 8 to 4 +move 3 from 2 to 7 +move 3 from 3 to 7 +move 1 from 9 to 2 +move 4 from 6 to 4 +move 6 from 5 to 6 +move 2 from 7 to 3 +move 2 from 2 to 1 +move 5 from 6 to 5 +move 1 from 1 to 7 +move 9 from 5 to 4 +move 10 from 9 to 6 +move 1 from 2 to 6 +move 12 from 7 to 6 +move 1 from 7 to 4 +move 23 from 6 to 1 +move 10 from 4 to 3 +move 16 from 1 to 5 +move 5 from 1 to 2 +move 6 from 3 to 7 +move 5 from 4 to 8 diff --git a/src/bin/p05.rs b/src/bin/p05.rs new file mode 100644 index 0000000..4cb8770 --- /dev/null +++ b/src/bin/p05.rs @@ -0,0 +1,105 @@ +#![feature(iterator_try_collect)] + +use std::fs; +use std::str; +use std::str::FromStr; + +// not that type of crate +#[derive(Debug, Copy, Clone)] +struct Crate(char); + +impl FromStr for Crate { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + if let Some(c) = s.trim_matches(&['[', ']'] as &[_]).chars().next() { + Ok(Crate(c)) + } else { + Err("Expected a character") + } + } +} + +#[derive(Debug)] +struct CrateStack(Vec); + +impl CrateStack { + fn new() -> Self { + Self(Vec::new()) + } + + fn push(&mut self, cr: Crate) { + self.0.push(cr) + } + + fn pop(&mut self) -> Option { + self.0.pop() + } +} + +impl FromStr for CrateStack { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + Ok(CrateStack( + s.lines().flat_map(|l| l.parse::()).collect(), + )) + } +} + +#[derive(Debug)] +struct Dock(Vec); + +impl FromStr for Dock { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + let rows: Vec>> = s + .lines() + .rev() + .skip(1) + .map(|l| { + l.as_bytes() + .chunks(4) + .map(|c| str::from_utf8(c).unwrap().trim().parse::().ok()) + .collect() + }) + .collect(); + let mut result = Vec::::new(); + for row in rows { + while row.len() > result.len() { + result.push(CrateStack::new()) + } + + for i in 0..row.len() { + if let Some(r) = row[i] { + result[i].push(r); + } + } + } + dbg!(&result); + + Ok(Dock(result)) + } +} + +fn main() { + let filename = "etc/p05.txt"; + let string = fs::read_to_string(filename).expect("Can't open file"); + + let dock: Dock = string.split("\n\n").next().expect("first section").parse::().expect("can't parse dock"); + dbg!(dock); + + println!("PART ONE ---------------"); + + println!("\n PART TWO ---------------"); +} + +fn part1() {} + +fn part2() {} + +#[cfg(test)] +mod tests { + use super::*; +}