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() {}
}