48 lines
1.1 KiB
Rust
48 lines
1.1 KiB
Rust
|
#![feature(iter_array_chunks, test)]
|
||
|
extern crate test;
|
||
|
use aoc2022::{boilerplate, common::*};
|
||
|
|
||
|
const DAY: usize = 2;
|
||
|
|
||
|
#[rustfmt::skip]
|
||
|
fn round(input: [u8; 4]) -> usize {
|
||
|
match (input[0], input[2]) {
|
||
|
(b'A', b'X') => 4, (b'A', b'Y') => 8, (b'A', b'Z') => 3, (b'B', b'X') => 1, (b'B', b'Y') => 5, (b'B', b'Z') => 9, (b'C', b'X') => 7, (b'C', b'Y') => 2, (b'C', b'Z') => 6,
|
||
|
_ => unreachable!(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[rustfmt::skip]
|
||
|
fn round_p2(input: [u8; 4]) -> usize {
|
||
|
match (input[0], input[2]) {
|
||
|
(b'A', b'X') => 3, (b'A', b'Y') => 4, (b'A', b'Z') => 8, (b'B', b'X') => 1, (b'B', b'Y') => 5, (b'B', b'Z') => 9, (b'C', b'X') => 2, (b'C', b'Y') => 6, (b'C', b'Z') => 7,
|
||
|
_ => unreachable!(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn parse_input(raw: &str) -> &str {
|
||
|
raw
|
||
|
}
|
||
|
|
||
|
fn part1(parsed: &str) -> usize {
|
||
|
parsed.bytes().array_chunks().map(round).sum()
|
||
|
}
|
||
|
|
||
|
fn part2(parsed: &str) -> usize {
|
||
|
parsed.bytes().array_chunks().map(round_p2).sum()
|
||
|
}
|
||
|
|
||
|
boilerplate! {
|
||
|
TEST_INPUT == "A Y
|
||
|
B X
|
||
|
C Z
|
||
|
",
|
||
|
tests: {
|
||
|
part1: { TEST_INPUT => 15 },
|
||
|
part2: { TEST_INPUT => 12 },
|
||
|
},
|
||
|
bench1 == 13268,
|
||
|
bench2 == 15508,
|
||
|
bench_parse: str::len => 10000,
|
||
|
}
|