aoc-rs-2021/src/day_16/model.rs
Jan Christian Grünhage aac5c02b82 implement day 16 part 1
2021-12-16 14:08:24 +01:00

40 lines
814 B
Rust

#[derive(Debug, PartialEq)]
pub struct Packet {
pub version: usize,
pub kind: Kind,
}
impl Packet {
pub fn sum_of_version_numbers(&self) -> usize {
match &self.kind {
Kind::Operator(op) => {
op.sub_packets
.iter()
.map(|sub| sub.sum_of_version_numbers())
.sum::<usize>()
+ self.version
}
Kind::LiteralValue(_) => self.version,
}
}
}
#[derive(Debug, PartialEq)]
pub enum Kind {
Operator(Operator),
LiteralValue(usize),
}
#[derive(Debug, PartialEq)]
pub struct Operator {
pub opcode: usize,
pub length: Length,
pub sub_packets: Vec<Packet>,
}
#[derive(Debug, PartialEq)]
pub enum Length {
Count(usize),
Length(usize),
}