clean up day5, don't use itertools
This commit is contained in:
parent
5779749423
commit
96441ccdbd
2 changed files with 27 additions and 38 deletions
|
@ -6,7 +6,7 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
aoc-runner = "0.3.0"
|
||||
aoc-runner-derive = "0.3.0"
|
||||
itertools = "0.10.5"
|
||||
regex = "1.7.0"
|
||||
aoc-runner = "0.3"
|
||||
aoc-runner-derive = "0.3"
|
||||
#itertools = "0.10.5"
|
||||
regex = "1.7"
|
||||
|
|
|
@ -1,53 +1,43 @@
|
|||
use aoc_runner_derive::{aoc as aoc_run, aoc_generator};
|
||||
use itertools::Itertools;
|
||||
|
||||
type Stax = Vec<Vec<char>>;
|
||||
type Inst = (usize, usize, usize);
|
||||
|
||||
enum Pstate {
|
||||
Setup,
|
||||
Instr,
|
||||
}
|
||||
|
||||
#[aoc_generator(day5)]
|
||||
fn parse_input_day1(input: &str) -> (Stax, Vec<Inst>) {
|
||||
let mut out = Vec::new();
|
||||
let mut inst = Vec::new();
|
||||
let mut state = Pstate::Setup;
|
||||
let mut parsing_crates = true;
|
||||
for _ in 0..9 {
|
||||
out.push(Vec::new());
|
||||
}
|
||||
|
||||
let re = regex::Regex::new(r"^move (\d+) from (\d+) to (\d+)$").unwrap();
|
||||
for line in input.lines() {
|
||||
match state {
|
||||
Pstate::Setup => {
|
||||
if line.trim().starts_with('1') {
|
||||
continue;
|
||||
}
|
||||
if line.trim().is_empty() {
|
||||
state = Pstate::Instr;
|
||||
}
|
||||
for (i, cell) in line.chars().chunks(4).into_iter().enumerate() {
|
||||
let cell: String = cell.collect();
|
||||
let cell = cell.trim();
|
||||
if !cell.is_empty() {
|
||||
let cell = cell.strip_prefix('[').unwrap().strip_suffix(']').unwrap();
|
||||
out[i].push(cell.chars().next().unwrap());
|
||||
}
|
||||
if parsing_crates {
|
||||
if line.trim().starts_with('1') {
|
||||
continue;
|
||||
}
|
||||
if line.trim().is_empty() {
|
||||
parsing_crates = false;
|
||||
}
|
||||
for (i, cell) in line.as_bytes().chunks(4).enumerate() {
|
||||
let cell = std::str::from_utf8(cell).unwrap().trim();
|
||||
if !cell.is_empty() {
|
||||
let cell = cell.strip_prefix('[').unwrap().strip_suffix(']').unwrap();
|
||||
out[i].push(cell.chars().next().unwrap());
|
||||
}
|
||||
}
|
||||
// parse the instructions
|
||||
Pstate::Instr => {
|
||||
let ins = re.captures(line).unwrap();
|
||||
inst.push((
|
||||
ins[1].parse().unwrap(),
|
||||
ins[2].parse::<usize>().unwrap() - 1,
|
||||
ins[3].parse::<usize>().unwrap() - 1,
|
||||
));
|
||||
}
|
||||
} else {
|
||||
let ins = re.captures(line).unwrap();
|
||||
inst.push((
|
||||
ins[1].parse().unwrap(),
|
||||
ins[2].parse::<usize>().unwrap() - 1,
|
||||
ins[3].parse::<usize>().unwrap() - 1,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
for stack in out.iter_mut() {
|
||||
stack.reverse();
|
||||
}
|
||||
|
@ -85,9 +75,8 @@ fn p2((stax, inst): &(Stax, Vec<Inst>)) -> String {
|
|||
let c = from.pop().unwrap();
|
||||
tmp.push(c);
|
||||
}
|
||||
for c in tmp.into_iter().rev() {
|
||||
stax[*to].push(c);
|
||||
}
|
||||
tmp.reverse();
|
||||
stax[*to].append(&mut tmp);
|
||||
}
|
||||
let mut s = String::with_capacity(9);
|
||||
for stack in stax {
|
||||
|
|
Loading…
Reference in a new issue