Optimize parsing 2022/05
This commit is contained in:
parent
5a86a400ef
commit
ef93b302ce
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user