1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
//! # Day 9: Explosives in Cyberspace
//!
//! Wandering around a secure area, you come across a datalink port to a new part of the network.
//! After briefly scanning it for interesting files, you find one file in particular that catches
//! your attention. It's compressed with an experimental format, but fortunately, the documentation
//! for the format is nearby.
//!
//! The format compresses a sequence of characters. Whitespace is ignored. To indicate that some
//! sequence should be repeated, a marker is added to the file, like `(10x2)`. To decompress this
//! marker, take the subsequent `10` characters and repeat them `2` times. Then, continue reading
//! the file **after** the repeated data. The marker itself is not included in the decompressed
//! output.
//!
//! If parentheses or other characters appear within the data referenced by a marker, that's okay -
//! treat it like normal data, not a marker, and then resume looking for markers after the
//! decompressed section.
//!
//! For example:
//!
//! - `ADVENT` contains no markers and decompresses to itself with no changes, resulting in a
//! decompressed length of `6`.
//! - `A(1x5)BC` repeats only the `B` a total of `5` times, becoming `ABBBBBC` for a decompressed
//! length of `7`.
//! - `(3x3)XYZ` becomes `XYZXYZXYZ` for a decompressed length of `9`.
//! - `A(2x2)BCD(2x2)EFG` doubles the `BC` and `EF`, becoming `ABCBCDEFEFG` for a decompressed
//! length of `11`.
//! - `(6x1)(1x3)A` simply becomes `(1x3)A` - the `(1x3)` looks like a marker, but because it's
//! within a data section of another marker, it is not treated any differently from the `A` that
//! comes after it. It has a decompressed length of `6`.
//! - `X(8x2)(3x3)ABCY` becomes `X(3x3)ABC(3x3)ABCY` (for a decompressed length of `18`), because
//! the decompressed data from the `(8x2)` marker (the `(3x3)ABC`) is skipped and not processed
//! further.
//!
//! What is the **decompressed length** of the file (your puzzle input)? Don't count whitespace.
use anyhow::Result;
pub const INPUT: &str = include_str!("d09.txt");
pub fn solve_part_one(input: &str) -> Result<i64> {
Ok(0)
}
pub fn solve_part_two(input: &str) -> Result<i64> {
Ok(0)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn part_one() {}
#[test]
fn part_two() {}
}