Added Solution for 2020 day 12
This commit is contained in:
parent
dc6ec67f4e
commit
76a31f1fc0
7 changed files with 1053 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,3 +5,4 @@ day00
|
||||||
**/dbg.log
|
**/dbg.log
|
||||||
**/2
|
**/2
|
||||||
**/.vimdid
|
**/.vimdid
|
||||||
|
**/rust-analyzer.core
|
||||||
|
|
8
2020/day12_rain_risk/Cargo.toml
Normal file
8
2020/day12_rain_risk/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "day12_rain_risk"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
77
2020/day12_rain_risk/challenge.txt
Normal file
77
2020/day12_rain_risk/challenge.txt
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
Your ferry made decent progress toward the island, but the storm came in faster than anyone expected. The ferry needs to take *evasive actions*!
|
||||||
|
|
||||||
|
Unfortunately, the ship's navigation computer seems to be malfunctioning; rather than giving a route directly to safety, it produced extremely circuitous instructions. When the captain uses the [PA system](https://en.wikipedia.org/wiki/Public_address_system) to ask if anyone can help, you quickly volunteer.
|
||||||
|
|
||||||
|
The navigation instructions (your puzzle input) consists of a sequence of single-character *actions* paired with integer input *values*. After staring at them for a few minutes, you work out what they probably mean:
|
||||||
|
|
||||||
|
* Action *`N`* means to move *north* by the given value.
|
||||||
|
* Action *`S`* means to move *south* by the given value.
|
||||||
|
* Action *`E`* means to move *east* by the given value.
|
||||||
|
* Action *`W`* means to move *west* by the given value.
|
||||||
|
* Action *`L`* means to turn *left* the given number of degrees.
|
||||||
|
* Action *`R`* means to turn *right* the given number of degrees.
|
||||||
|
* Action *`F`* means to move *forward* by the given value in the direction the ship is currently facing.
|
||||||
|
|
||||||
|
The ship starts by facing *east*. Only the `L` and `R` actions change the direction the ship is facing. (That is, if the ship is facing east and the next instruction is `N10`, the ship would move north 10 units, but would still move east if the following action were `F`.)
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
F10
|
||||||
|
N3
|
||||||
|
F7
|
||||||
|
R90
|
||||||
|
F11
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
These instructions would be handled as follows:
|
||||||
|
|
||||||
|
* `F10` would move the ship 10 units east (because the ship starts by facing east) to *east 10, north 0*.
|
||||||
|
* `N3` would move the ship 3 units north to *east 10, north 3*.
|
||||||
|
* `F7` would move the ship another 7 units east (because the ship is still facing east) to *east 17, north 3*.
|
||||||
|
* `R90` would cause the ship to turn right by 90 degrees and face *south*; it remains at *east 17, north 3*.
|
||||||
|
* `F11` would move the ship 11 units south to *east 17, south 8*.
|
||||||
|
|
||||||
|
At the end of these instructions, the ship's [Manhattan distance](https://en.wikipedia.org/wiki/Manhattan_distance) (sum of the absolute values of its east/west position and its north/south position) from its starting position is `17 + 8` = *`25`*.
|
||||||
|
|
||||||
|
Figure out where the navigation instructions lead. *What is the Manhattan distance between that location and the ship's starting position?*
|
||||||
|
|
||||||
|
Your puzzle answer was `1032`.
|
||||||
|
|
||||||
|
\--- Part Two ---
|
||||||
|
----------
|
||||||
|
|
||||||
|
Before you can give the destination to the captain, you realize that the actual action meanings were printed on the back of the instructions the whole time.
|
||||||
|
|
||||||
|
Almost all of the actions indicate how to move a *waypoint* which is relative to the ship's position:
|
||||||
|
|
||||||
|
* Action *`N`* means to move the waypoint *north* by the given value.
|
||||||
|
* Action *`S`* means to move the waypoint *south* by the given value.
|
||||||
|
* Action *`E`* means to move the waypoint *east* by the given value.
|
||||||
|
* Action *`W`* means to move the waypoint *west* by the given value.
|
||||||
|
* Action *`L`* means to rotate the waypoint around the ship *left* (*counter-clockwise*) the given number of degrees.
|
||||||
|
* Action *`R`* means to rotate the waypoint around the ship *right* (*clockwise*) the given number of degrees.
|
||||||
|
* Action *`F`* means to move *forward* to the waypoint a number of times equal to the given value.
|
||||||
|
|
||||||
|
The waypoint starts *10 units east and 1 unit north* relative to the ship. The waypoint is relative to the ship; that is, if the ship moves, the waypoint moves with it.
|
||||||
|
|
||||||
|
For example, using the same instructions as above:
|
||||||
|
|
||||||
|
* `F10` moves the ship to the waypoint 10 times (a total of *100 units east and 10 units north*), leaving the ship at *east 100, north 10*. The waypoint stays 10 units east and 1 unit north of the ship.
|
||||||
|
* `N3` moves the waypoint 3 units north to *10 units east and 4 units north of the ship*. The ship remains at *east 100, north 10*.
|
||||||
|
* `F7` moves the ship to the waypoint 7 times (a total of *70 units east and 28 units north*), leaving the ship at *east 170, north 38*. The waypoint stays 10 units east and 4 units north of the ship.
|
||||||
|
* `R90` rotates the waypoint around the ship clockwise 90 degrees, moving it to *4 units east and 10 units south of the ship*. The ship remains at *east 170, north 38*.
|
||||||
|
* `F11` moves the ship to the waypoint 11 times (a total of *44 units east and 110 units south*), leaving the ship at *east 214, south 72*. The waypoint stays 4 units east and 10 units south of the ship.
|
||||||
|
|
||||||
|
After these operations, the ship's Manhattan distance from its starting position is `214 + 72` = *`286`*.
|
||||||
|
|
||||||
|
Figure out where the navigation instructions actually lead. *What is the Manhattan distance between that location and the ship's starting position?*
|
||||||
|
|
||||||
|
Your puzzle answer was `156735`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars: \*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2020) and try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle input](12/input).
|
BIN
2020/day12_rain_risk/day12_rain_risk-673.core
Normal file
BIN
2020/day12_rain_risk/day12_rain_risk-673.core
Normal file
Binary file not shown.
166
2020/day12_rain_risk/src/lib.rs
Normal file
166
2020/day12_rain_risk/src/lib.rs
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
use core::fmt::Display;
|
||||||
|
use std::num::ParseIntError;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub enum ParseError {
|
||||||
|
ParseIntError(std::num::ParseIntError),
|
||||||
|
LineMalformed(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ParseIntError> for ParseError {
|
||||||
|
fn from(value: ParseIntError) -> Self {
|
||||||
|
Self::ParseIntError(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for ParseError {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::ParseIntError(e) => write!(f, "Unable to parse into integer: {e}"),
|
||||||
|
Self::LineMalformed(v) => write!(f, "Line is malformed: {v}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Action {
|
||||||
|
North(isize),
|
||||||
|
South(isize),
|
||||||
|
East(isize),
|
||||||
|
West(isize),
|
||||||
|
Left(isize),
|
||||||
|
Right(isize),
|
||||||
|
Forwd(isize),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<&str> for Action {
|
||||||
|
type Error = ParseError;
|
||||||
|
|
||||||
|
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||||
|
match value.chars().next() {
|
||||||
|
Some('N') => Ok(Self::North(value[1..].parse()?)),
|
||||||
|
Some('S') => Ok(Self::South(value[1..].parse()?)),
|
||||||
|
Some('E') => Ok(Self::East(value[1..].parse()?)),
|
||||||
|
Some('W') => Ok(Self::West(value[1..].parse()?)),
|
||||||
|
Some('L') => Ok(Self::Left(value[1..].parse()?)),
|
||||||
|
Some('R') => Ok(Self::Right(value[1..].parse()?)),
|
||||||
|
Some('F') => Ok(Self::Forwd(value[1..].parse()?)),
|
||||||
|
_ => Err(Self::Error::LineMalformed(value.to_string())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Ferry {
|
||||||
|
pos: (isize, isize),
|
||||||
|
dir: isize,
|
||||||
|
waypoint: (isize, isize),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Ferry {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
pos: (0, 0),
|
||||||
|
dir: 0,
|
||||||
|
waypoint: (10, -1),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ferry {
|
||||||
|
fn perform_action(&mut self, action: &Action) {
|
||||||
|
match action {
|
||||||
|
Action::North(i) => self.pos.1 -= i,
|
||||||
|
Action::South(i) => self.pos.1 += i,
|
||||||
|
Action::East(i) => self.pos.0 += i,
|
||||||
|
Action::West(i) => self.pos.0 -= i,
|
||||||
|
Action::Left(i) => self.dir = (self.dir-i) % 360,
|
||||||
|
Action::Right(i) => self.dir = (self.dir+i) % 360,
|
||||||
|
Action::Forwd(i) => match self.dir {
|
||||||
|
-90 | 270 => self.pos.1 -= i,
|
||||||
|
90 | -270 => self.pos.1 += i,
|
||||||
|
0 => self.pos.0 += i,
|
||||||
|
180 | -180 => self.pos.0 -= i,
|
||||||
|
_ => panic!("Trying to move in unknown direction {}", self.dir),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn perform_waypoint_action(&mut self, action: &Action) {
|
||||||
|
match action {
|
||||||
|
Action::North(i) => self.waypoint.1 -= i,
|
||||||
|
Action::South(i) => self.waypoint.1 += i,
|
||||||
|
Action::East(i) => self.waypoint.0 += i,
|
||||||
|
Action::West(i) => self.waypoint.0 -= i,
|
||||||
|
Action::Left(i) => match i {
|
||||||
|
90 => {
|
||||||
|
let x = self.waypoint.0;
|
||||||
|
self.waypoint.0 = self.waypoint.1;
|
||||||
|
self.waypoint.1 = -x;
|
||||||
|
},
|
||||||
|
180 => {
|
||||||
|
self.waypoint.0 *= -1;
|
||||||
|
self.waypoint.1 *= -1;
|
||||||
|
},
|
||||||
|
270 => {
|
||||||
|
let x = self.waypoint.0;
|
||||||
|
self.waypoint.0 = -self.waypoint.1;
|
||||||
|
self.waypoint.1 = x;
|
||||||
|
},
|
||||||
|
_ => panic!("Trying to turn left by unknown amount {i}"),
|
||||||
|
},
|
||||||
|
Action::Right(i) => match i {
|
||||||
|
90 => {
|
||||||
|
let x = self.waypoint.0;
|
||||||
|
self.waypoint.0 = -self.waypoint.1;
|
||||||
|
self.waypoint.1 = x;
|
||||||
|
},
|
||||||
|
180 => {
|
||||||
|
self.waypoint.0 *= -1;
|
||||||
|
self.waypoint.1 *= -1;
|
||||||
|
},
|
||||||
|
270 => {
|
||||||
|
let x = self.waypoint.0;
|
||||||
|
self.waypoint.0 = self.waypoint.1;
|
||||||
|
self.waypoint.1 = -x;
|
||||||
|
},
|
||||||
|
_ => panic!("Trying to turn right by unknown amount {i}"),
|
||||||
|
},
|
||||||
|
Action::Forwd(i) => {
|
||||||
|
self.pos.0 += i*self.waypoint.0;
|
||||||
|
self.pos.1 += i*self.waypoint.1;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run(input: &str) -> Result<(usize, usize), ParseError> {
|
||||||
|
let mut ferry = Ferry::default();
|
||||||
|
let actions: Vec<_> = input.lines().map(Action::try_from).collect::<Result<Vec<_>, _>>()?;
|
||||||
|
actions.iter().for_each(|a| ferry.perform_action(a));
|
||||||
|
let first = ferry.pos.0.unsigned_abs() + ferry.pos.1.unsigned_abs();
|
||||||
|
ferry = Ferry::default();
|
||||||
|
actions.iter().for_each(|a| ferry.perform_waypoint_action(a));
|
||||||
|
let second = ferry.pos.0.unsigned_abs() + ferry.pos.1.unsigned_abs();
|
||||||
|
Ok((first, second))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn read_file(name: &str) -> String {
|
||||||
|
read_to_string(name).expect(&format!("Unable to read file: {name}")[..]).trim().to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sample() {
|
||||||
|
let sample_input = read_file("tests/sample_input");
|
||||||
|
assert_eq!(run(&sample_input), Ok((25, 286)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_challenge() {
|
||||||
|
let challenge_input = read_file("tests/challenge_input");
|
||||||
|
assert_eq!(run(&challenge_input), Ok((1032, 156735)));
|
||||||
|
}
|
||||||
|
}
|
796
2020/day12_rain_risk/tests/challenge_input
Normal file
796
2020/day12_rain_risk/tests/challenge_input
Normal file
|
@ -0,0 +1,796 @@
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
F26
|
||||||
|
S3
|
||||||
|
W2
|
||||||
|
N5
|
||||||
|
L180
|
||||||
|
S4
|
||||||
|
F41
|
||||||
|
W1
|
||||||
|
F48
|
||||||
|
W3
|
||||||
|
F44
|
||||||
|
F63
|
||||||
|
W5
|
||||||
|
N3
|
||||||
|
E5
|
||||||
|
F7
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
F38
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
F49
|
||||||
|
S5
|
||||||
|
F11
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
N4
|
||||||
|
E3
|
||||||
|
R180
|
||||||
|
W5
|
||||||
|
F93
|
||||||
|
S1
|
||||||
|
F67
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
S5
|
||||||
|
N3
|
||||||
|
L180
|
||||||
|
E1
|
||||||
|
N2
|
||||||
|
F90
|
||||||
|
S3
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
E1
|
||||||
|
F77
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
L180
|
||||||
|
E2
|
||||||
|
F25
|
||||||
|
N1
|
||||||
|
W1
|
||||||
|
S1
|
||||||
|
E5
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
F13
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
S5
|
||||||
|
F13
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F89
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
N5
|
||||||
|
E4
|
||||||
|
S4
|
||||||
|
F26
|
||||||
|
N1
|
||||||
|
R270
|
||||||
|
N5
|
||||||
|
E5
|
||||||
|
L180
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
F49
|
||||||
|
S2
|
||||||
|
F53
|
||||||
|
W5
|
||||||
|
L180
|
||||||
|
F54
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
F3
|
||||||
|
W5
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
L90
|
||||||
|
F49
|
||||||
|
W4
|
||||||
|
S5
|
||||||
|
F73
|
||||||
|
L270
|
||||||
|
W1
|
||||||
|
S4
|
||||||
|
F46
|
||||||
|
S4
|
||||||
|
W2
|
||||||
|
S5
|
||||||
|
E4
|
||||||
|
N4
|
||||||
|
F6
|
||||||
|
E4
|
||||||
|
S4
|
||||||
|
F38
|
||||||
|
F4
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
W2
|
||||||
|
F20
|
||||||
|
N3
|
||||||
|
F64
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
W5
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
N3
|
||||||
|
F17
|
||||||
|
R90
|
||||||
|
F62
|
||||||
|
E4
|
||||||
|
E2
|
||||||
|
F47
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F57
|
||||||
|
L270
|
||||||
|
N2
|
||||||
|
W3
|
||||||
|
S5
|
||||||
|
W4
|
||||||
|
E2
|
||||||
|
S5
|
||||||
|
F93
|
||||||
|
F57
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
F50
|
||||||
|
N2
|
||||||
|
F4
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
F34
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
N4
|
||||||
|
W3
|
||||||
|
N5
|
||||||
|
R180
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
F70
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
F92
|
||||||
|
N1
|
||||||
|
F96
|
||||||
|
F85
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
F23
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
S5
|
||||||
|
F66
|
||||||
|
W3
|
||||||
|
L180
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
R270
|
||||||
|
R270
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
F78
|
||||||
|
E1
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
F52
|
||||||
|
S4
|
||||||
|
F9
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
N2
|
||||||
|
F8
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
F63
|
||||||
|
E5
|
||||||
|
F18
|
||||||
|
E3
|
||||||
|
F43
|
||||||
|
E2
|
||||||
|
F10
|
||||||
|
R90
|
||||||
|
F96
|
||||||
|
S5
|
||||||
|
F22
|
||||||
|
W2
|
||||||
|
S5
|
||||||
|
F39
|
||||||
|
R90
|
||||||
|
F38
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
N2
|
||||||
|
F14
|
||||||
|
L270
|
||||||
|
S4
|
||||||
|
F78
|
||||||
|
F85
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
E3
|
||||||
|
S3
|
||||||
|
F98
|
||||||
|
E2
|
||||||
|
S2
|
||||||
|
F100
|
||||||
|
S3
|
||||||
|
S3
|
||||||
|
W5
|
||||||
|
W3
|
||||||
|
S5
|
||||||
|
F67
|
||||||
|
L180
|
||||||
|
S2
|
||||||
|
E5
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
E2
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
F77
|
||||||
|
W1
|
||||||
|
F84
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
S4
|
||||||
|
F89
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
F97
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
F70
|
||||||
|
S5
|
||||||
|
E1
|
||||||
|
L180
|
||||||
|
W5
|
||||||
|
F86
|
||||||
|
S3
|
||||||
|
F20
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
F3
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
F43
|
||||||
|
L180
|
||||||
|
F81
|
||||||
|
E2
|
||||||
|
N3
|
||||||
|
F16
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
F17
|
||||||
|
E3
|
||||||
|
F1
|
||||||
|
E4
|
||||||
|
F17
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
S3
|
||||||
|
W4
|
||||||
|
F60
|
||||||
|
E3
|
||||||
|
E1
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
S5
|
||||||
|
F19
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F20
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
F9
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
W5
|
||||||
|
F56
|
||||||
|
N2
|
||||||
|
L180
|
||||||
|
N1
|
||||||
|
E5
|
||||||
|
L90
|
||||||
|
F15
|
||||||
|
W4
|
||||||
|
F26
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
F19
|
||||||
|
S3
|
||||||
|
W1
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
N2
|
||||||
|
F86
|
||||||
|
N5
|
||||||
|
E3
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
L270
|
||||||
|
W3
|
||||||
|
F42
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
R180
|
||||||
|
W2
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
F55
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
F11
|
||||||
|
S4
|
||||||
|
F38
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
F8
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
W5
|
||||||
|
S2
|
||||||
|
F2
|
||||||
|
F92
|
||||||
|
S3
|
||||||
|
F77
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
F24
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
F16
|
||||||
|
L270
|
||||||
|
W3
|
||||||
|
F83
|
||||||
|
L270
|
||||||
|
E2
|
||||||
|
F98
|
||||||
|
L180
|
||||||
|
F89
|
||||||
|
E5
|
||||||
|
F98
|
||||||
|
S4
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
N4
|
||||||
|
L180
|
||||||
|
F57
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
S5
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
F43
|
||||||
|
N2
|
||||||
|
F29
|
||||||
|
W3
|
||||||
|
R90
|
||||||
|
F41
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
F78
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
N1
|
||||||
|
W2
|
||||||
|
F6
|
||||||
|
L270
|
||||||
|
W5
|
||||||
|
F91
|
||||||
|
W5
|
||||||
|
N1
|
||||||
|
S4
|
||||||
|
F41
|
||||||
|
W4
|
||||||
|
F74
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
N4
|
||||||
|
F76
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
N2
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
F79
|
||||||
|
R270
|
||||||
|
W1
|
||||||
|
F92
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
F71
|
||||||
|
N4
|
||||||
|
L180
|
||||||
|
W4
|
||||||
|
F16
|
||||||
|
W5
|
||||||
|
F84
|
||||||
|
S5
|
||||||
|
F35
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
F25
|
||||||
|
L180
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
F15
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
F46
|
||||||
|
S1
|
||||||
|
W1
|
||||||
|
R180
|
||||||
|
E4
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
W3
|
||||||
|
S3
|
||||||
|
L270
|
||||||
|
F94
|
||||||
|
R180
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
S2
|
||||||
|
W3
|
||||||
|
F53
|
||||||
|
L180
|
||||||
|
S3
|
||||||
|
F19
|
||||||
|
N3
|
||||||
|
F54
|
||||||
|
L180
|
||||||
|
S5
|
||||||
|
F8
|
||||||
|
S1
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
N3
|
||||||
|
F28
|
||||||
|
R180
|
||||||
|
F23
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
F6
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
F89
|
||||||
|
S1
|
||||||
|
W2
|
||||||
|
S5
|
||||||
|
F8
|
||||||
|
N3
|
||||||
|
F23
|
||||||
|
N4
|
||||||
|
F5
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
L180
|
||||||
|
S3
|
||||||
|
F7
|
||||||
|
N2
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
E1
|
||||||
|
L180
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
F99
|
||||||
|
N3
|
||||||
|
F96
|
||||||
|
W3
|
||||||
|
R90
|
||||||
|
F73
|
||||||
|
W5
|
||||||
|
F71
|
||||||
|
R180
|
||||||
|
S2
|
||||||
|
F84
|
||||||
|
N4
|
||||||
|
F4
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
F34
|
||||||
|
E2
|
||||||
|
W2
|
||||||
|
F53
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
F60
|
||||||
|
N4
|
||||||
|
F28
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
N4
|
||||||
|
F54
|
||||||
|
R270
|
||||||
|
F45
|
||||||
|
S5
|
||||||
|
F93
|
||||||
|
L90
|
||||||
|
F66
|
||||||
|
R180
|
||||||
|
F92
|
||||||
|
N4
|
||||||
|
F97
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
S1
|
||||||
|
W5
|
||||||
|
F68
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
F94
|
||||||
|
S4
|
||||||
|
F64
|
||||||
|
R180
|
||||||
|
F18
|
||||||
|
N1
|
||||||
|
S4
|
||||||
|
E5
|
||||||
|
E2
|
||||||
|
F81
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
F3
|
||||||
|
R90
|
||||||
|
F81
|
||||||
|
W4
|
||||||
|
S4
|
||||||
|
E5
|
||||||
|
N5
|
||||||
|
R270
|
||||||
|
E3
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
L180
|
||||||
|
S1
|
||||||
|
F84
|
||||||
|
W2
|
||||||
|
L270
|
||||||
|
F6
|
||||||
|
N1
|
||||||
|
R180
|
||||||
|
E5
|
||||||
|
F7
|
||||||
|
E2
|
||||||
|
L180
|
||||||
|
E2
|
||||||
|
F80
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
F88
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
N1
|
||||||
|
F71
|
||||||
|
R180
|
||||||
|
N2
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
S4
|
||||||
|
L180
|
||||||
|
F27
|
||||||
|
L90
|
||||||
|
F57
|
||||||
|
F38
|
||||||
|
W5
|
||||||
|
L180
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
W1
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
F36
|
||||||
|
S1
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
F65
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
N4
|
||||||
|
E1
|
||||||
|
F14
|
||||||
|
L90
|
||||||
|
F44
|
||||||
|
R90
|
||||||
|
F34
|
||||||
|
S2
|
||||||
|
L90
|
||||||
|
R180
|
||||||
|
F87
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
F9
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
F69
|
||||||
|
S3
|
||||||
|
W4
|
||||||
|
N4
|
||||||
|
F30
|
||||||
|
W5
|
||||||
|
F15
|
||||||
|
R90
|
||||||
|
L180
|
||||||
|
W4
|
||||||
|
F5
|
||||||
|
R180
|
||||||
|
E1
|
||||||
|
F6
|
||||||
|
R180
|
||||||
|
S1
|
||||||
|
F20
|
||||||
|
E1
|
||||||
|
S2
|
||||||
|
E5
|
||||||
|
F13
|
||||||
|
N5
|
||||||
|
F83
|
||||||
|
W2
|
||||||
|
L270
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
F62
|
||||||
|
R270
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
F20
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
F37
|
||||||
|
N2
|
||||||
|
N2
|
||||||
|
F82
|
||||||
|
L90
|
||||||
|
F23
|
||||||
|
E3
|
||||||
|
F63
|
||||||
|
R180
|
||||||
|
F1
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F68
|
||||||
|
E5
|
||||||
|
F75
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
E4
|
||||||
|
E1
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
L180
|
||||||
|
F92
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
F27
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
L180
|
||||||
|
W5
|
||||||
|
F70
|
||||||
|
S5
|
||||||
|
L180
|
||||||
|
F89
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
N3
|
||||||
|
F64
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
F77
|
||||||
|
E4
|
||||||
|
F55
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
F46
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F94
|
||||||
|
S5
|
||||||
|
R180
|
||||||
|
F9
|
||||||
|
L180
|
||||||
|
S4
|
||||||
|
L90
|
||||||
|
F25
|
5
2020/day12_rain_risk/tests/sample_input
Normal file
5
2020/day12_rain_risk/tests/sample_input
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
F10
|
||||||
|
N3
|
||||||
|
F7
|
||||||
|
R90
|
||||||
|
F11
|
Loading…
Add table
Add a link
Reference in a new issue