41 lines
957 B
Rust
41 lines
957 B
Rust
mod model;
|
|
mod parsing;
|
|
|
|
use aoc_runner_derive::{aoc, aoc_generator};
|
|
pub use model::{Kind, Operator, Packet};
|
|
pub use parsing::{parse_packet, BinTokens};
|
|
|
|
#[aoc_generator(day16)]
|
|
pub fn parse_input(input: &str) -> Packet {
|
|
parse_packet(&mut input.parse::<BinTokens>().unwrap()).unwrap()
|
|
}
|
|
|
|
#[aoc(day16, part1)]
|
|
pub fn part1(input: &Packet) -> usize {
|
|
input.sum_of_version_numbers()
|
|
}
|
|
|
|
#[aoc(day16, part2)]
|
|
pub fn part2(input: &Packet) -> usize {
|
|
input.calculate()
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
#[test]
|
|
fn part2_example() {
|
|
for (input, result) in [
|
|
("C200B40A82", 3),
|
|
("04005AC33890", 54),
|
|
("880086C3E88112", 7),
|
|
("CE00C43D881120", 9),
|
|
("D8005AC2A8F0", 1),
|
|
("F600BC2D8F", 0),
|
|
("9C005AC2F8F0", 0),
|
|
("9C0141080250320F1802104A08", 1),
|
|
] {
|
|
assert_eq!(super::part2(&super::parse_input(input)), result);
|
|
}
|
|
}
|
|
}
|