Optimize parsing 2022/05

This commit is contained in:
kageru 2022-12-05 11:35:34 +01:00
parent 5a86a400ef
commit ef93b302ce
4 changed files with 16 additions and 11 deletions

View File

@ -4,7 +4,7 @@ use std::collections::BinaryHeap;
use aoc2022::{boilerplate, common::*};
const DAY: usize = 01;
const DAY: usize = 1;
type Parsed = BinaryHeap<usize>;
fn parse_input(raw: &str) -> Parsed {

View File

@ -7,7 +7,7 @@ const DAY: usize = 2;
fn round([other, _, own, _]: [u8; 4]) -> usize {
(match other.wrapping_sub(own - b'X' + b'A') {
0 => 3 + own - b'W',
1 | 254 => 0 + own - b'W',
1 | 254 => own - b'W',
_ => 6 + own - b'W',
}) as usize
}

View File

@ -4,7 +4,7 @@ use std::collections::HashSet;
use aoc2022::{boilerplate, common::*};
const DAY: usize = 03;
const DAY: usize = 3;
type Parsed = Vec<(HashSet<u8>, HashSet<u8>)>;
fn parse_input(raw: &str) -> Parsed {

View File

@ -1,5 +1,6 @@
#![feature(test)]
#![feature(test, slice_take)]
extern crate test;
use aoc2022::{boilerplate, common::*};
const DAY: usize = 5;
@ -24,20 +25,24 @@ fn parse_input(raw: &str) -> Parsed {
};
let num_stacks = (stack_numbers.trim().bytes().last().unwrap() - b'0') as usize;
let mut stacks = vec![vec![]; num_stacks];
for s in raw_stacks.iter().rev() {
for n in 0..num_stacks {
for &s in raw_stacks.iter().rev() {
for (n, stack) in stacks.iter_mut().enumerate() {
match s.as_bytes().get(1 + 4 * n) {
Some(b' ') | None => (),
Some(&c) => stacks[n].push(c),
Some(&c) => stack.push(c),
}
}
}
let moves = lines
.skip(1)
.map(|l| {
let (n, pos) = l[5..].split_once(" from ").unwrap();
let (src, dst) = pos.split_once(" to ").unwrap();
Move { n: parse_num(n), src: parse_num::<usize>(src) - 1, dst: parse_num::<usize>(dst) - 1 }
.map(|l| match l.as_bytes() {
[_, _, _, _, _, n, _, _, _, _, _, _, src, _, _, _, _, dst] => {
Move { n: (n - b'0') as usize, src: (src - b'1') as _, dst: (dst - b'1') as _ }
}
[_, _, _, _, _, n1, n2, _, _, _, _, _, _, src, _, _, _, _, dst] => {
Move { n: ((n1 - b'0') * 10 + n2 - b'0') as _, src: (src - b'1') as _, dst: (dst - b'1') as _ }
}
_ => unreachable!("Operations can’t be repeated more than 99 times"),
})
.collect();
(stacks, moves)