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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//! # Day 21: Scrambled Letters and Hash
//!
//! The computer system you're breaking into uses a weird scrambling function to store its
//! passwords. It shouldn't be much trouble to create your own scrambled password so you can add it
//! to the system; you just have to implement the scrambler.
//!
//! The scrambling function is a series of operations (the exact list is provided in your puzzle
//! input). Starting with the password to be scrambled, apply each operation in succession to the
//! string. The individual operations behave as follows:
//!
//! - `swap position X with position Y` means that the letters at indexes `X` and `Y` (counting from
//!   `0`) should be **swapped**.
//! - `swap letter X with letter Y` means that the letters `X` and `Y` should be **swapped**
//!   (regardless of where they appear in the string).
//! - `rotate left/right X steps` means that the whole string should be **rotated**; for example,
//!   one right rotation would turn `abcd` into `dabc`.
//! - `rotate based on position of letter X` means that the whole string should be **rotated to the
//!   right** based on the **index** of letter `X` (counting from `0`) as determined **before** this
//!   instruction does any rotations. Once the index is determined, rotate the string to the right
//!   one time, plus a number of times equal to that index, plus one additional time if the index
//!   was at least `4`.
//! - `reverse positions X through Y` means that the span of letters at indexes `X` through `Y`
//!   (including the letters at `X` and `Y`) should be **reversed in order**.
//! - `move position X to position Y` means that the letter which is at index `X` should be
//!   **removed** from the string, then **inserted** such that it ends up at index `Y`.
//!
//! For example, suppose you start with `abcde` and perform the following operations:
//!
//! - `swap position 4 with position 0` swaps the first and last letters, producing the input for
//!   the next step, `ebcda`.
//! - `swap letter d with letter b` swaps the positions of `d` and `b`: `edcba`.
//! - `reverse positions 0 through 4` causes the entire string to be reversed, producing `abcde`.
//! - `rotate left 1 step` shifts all letters left one position, causing the first letter to wrap to
//!   the end of the string: `bcdea`.
//! - `move position 1 to position 4` removes the letter at position `1` (`c`), then inserts it at
//!   position `4` (the end of the string): `bdeac`.
//! - `move position 3 to position 0` removes the letter at position `3` (`a`), then inserts it at
//!   position `0` (the front of the string): `abdec`.
//! - `rotate based on position of letter b` finds the index of letter `b` (`1`), then rotates the
//!   string right once plus a number of times equal to that index (`2`): `ecabd`.
//! - `rotate based on position of letter d` finds the index of letter `d` (`4`), then rotates the
//!   string right once, plus a number of times equal to that index, plus an additional time because
//!   the index was at least `4`, for a total of `6` right rotations: `decab`.
//!
//! After these steps, the resulting scrambled password is `decab`.
//!
//! Now, you just need to generate a new scrambled password and you can access the system. Given the
//! list of scrambling operations in your puzzle input, **what is the result of scrambling
//! `abcdefgh`?**

use anyhow::Result;

pub const INPUT: &str = include_str!("d21.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() {}
}