summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--data/2021/2.txt1000
-rw-r--r--src/2021/2/mod.rs41
-rw-r--r--src/2021/mod.rs4
3 files changed, 1045 insertions, 0 deletions
diff --git a/data/2021/2.txt b/data/2021/2.txt
new file mode 100644
index 0000000..fcc2020
--- /dev/null
+++ b/data/2021/2.txt
@@ -0,0 +1,1000 @@
+forward 2
+down 1
+down 7
+forward 6
+down 6
+down 6
+forward 6
+down 6
+down 9
+up 6
+forward 5
+down 1
+down 7
+forward 5
+forward 8
+forward 8
+forward 3
+down 3
+down 9
+down 1
+forward 5
+up 2
+down 6
+forward 9
+up 5
+forward 3
+down 9
+down 6
+down 2
+down 2
+down 5
+up 8
+up 1
+down 2
+down 7
+forward 1
+down 1
+down 4
+down 2
+forward 7
+down 9
+forward 3
+up 1
+up 6
+forward 2
+forward 2
+down 5
+down 5
+forward 1
+forward 5
+down 6
+forward 8
+forward 5
+up 8
+down 7
+forward 5
+up 9
+down 3
+forward 7
+up 8
+down 3
+down 3
+up 8
+down 1
+down 5
+up 8
+down 5
+forward 5
+forward 4
+up 8
+forward 6
+down 1
+down 3
+forward 8
+forward 6
+forward 2
+down 9
+up 9
+forward 6
+up 4
+down 9
+forward 3
+forward 4
+forward 4
+up 2
+forward 6
+up 7
+forward 4
+down 7
+forward 3
+forward 1
+forward 1
+down 9
+up 6
+forward 9
+down 1
+up 4
+forward 2
+forward 1
+down 3
+down 2
+forward 8
+forward 4
+forward 6
+down 3
+down 9
+forward 7
+forward 9
+down 4
+up 3
+down 7
+down 2
+down 8
+forward 7
+down 5
+forward 5
+forward 9
+down 7
+down 4
+down 2
+up 6
+forward 6
+down 7
+down 3
+up 7
+forward 4
+down 7
+forward 1
+forward 1
+up 1
+up 8
+down 7
+forward 8
+up 9
+up 2
+forward 8
+forward 2
+forward 3
+forward 2
+down 2
+down 4
+forward 1
+forward 1
+down 6
+forward 5
+down 9
+down 9
+down 3
+forward 6
+forward 5
+down 4
+forward 4
+forward 6
+down 9
+down 4
+forward 5
+forward 6
+forward 4
+forward 6
+forward 7
+down 6
+down 4
+up 8
+down 4
+forward 9
+down 3
+down 8
+down 5
+up 6
+forward 7
+forward 8
+forward 8
+down 5
+up 3
+down 3
+forward 4
+forward 4
+up 9
+forward 6
+down 1
+down 1
+down 7
+down 6
+forward 9
+forward 2
+down 5
+up 4
+down 5
+forward 8
+down 8
+forward 1
+forward 4
+up 2
+down 4
+forward 1
+down 6
+forward 1
+forward 3
+up 8
+forward 1
+up 8
+down 7
+forward 6
+up 5
+down 6
+up 8
+down 7
+down 6
+forward 7
+forward 9
+forward 2
+down 6
+down 4
+up 2
+forward 1
+down 8
+forward 9
+down 5
+down 7
+forward 6
+up 1
+forward 2
+forward 3
+forward 9
+up 3
+forward 7
+up 7
+up 7
+down 5
+up 7
+down 8
+forward 2
+down 4
+down 6
+up 2
+down 7
+forward 4
+down 2
+forward 3
+forward 7
+forward 4
+forward 1
+up 6
+forward 3
+forward 6
+forward 9
+up 9
+down 2
+forward 1
+forward 9
+forward 5
+forward 7
+forward 8
+down 1
+down 9
+up 4
+forward 5
+up 9
+down 9
+down 7
+forward 1
+forward 3
+forward 8
+forward 2
+forward 7
+forward 7
+forward 5
+down 8
+down 5
+up 9
+forward 2
+down 9
+forward 4
+up 9
+up 6
+up 2
+up 7
+down 2
+forward 8
+forward 9
+down 3
+down 6
+down 9
+forward 8
+down 4
+down 2
+down 8
+down 8
+down 9
+up 4
+down 5
+forward 4
+forward 7
+down 6
+down 3
+forward 9
+up 1
+forward 3
+down 1
+down 8
+up 1
+down 7
+down 5
+forward 2
+forward 3
+up 9
+down 7
+up 9
+up 8
+up 3
+forward 7
+down 4
+forward 8
+forward 9
+down 8
+forward 1
+up 7
+up 4
+down 2
+forward 6
+up 4
+forward 1
+up 1
+forward 1
+forward 2
+up 4
+up 2
+up 3
+forward 3
+forward 9
+forward 2
+down 1
+forward 9
+down 7
+forward 3
+down 3
+up 1
+down 2
+forward 9
+down 7
+down 5
+up 5
+down 2
+down 5
+forward 6
+forward 9
+forward 3
+down 5
+down 9
+forward 6
+up 3
+down 6
+down 8
+up 8
+down 1
+forward 2
+down 1
+up 5
+down 8
+up 4
+down 2
+forward 6
+forward 1
+down 8
+down 4
+down 2
+forward 4
+down 7
+up 9
+forward 6
+forward 5
+down 4
+down 5
+up 6
+down 6
+forward 4
+forward 8
+up 9
+down 8
+forward 3
+down 4
+down 9
+up 8
+down 1
+forward 7
+down 5
+down 1
+forward 7
+up 4
+forward 9
+up 6
+forward 8
+forward 1
+up 8
+up 8
+up 3
+forward 2
+forward 3
+forward 6
+forward 8
+forward 4
+down 7
+up 8
+forward 4
+down 3
+down 2
+down 5
+down 4
+up 2
+up 1
+down 3
+down 5
+down 3
+up 6
+down 8
+down 7
+down 9
+forward 2
+down 4
+up 1
+forward 4
+down 9
+forward 8
+up 3
+down 4
+down 1
+up 3
+forward 7
+forward 9
+down 5
+up 7
+forward 4
+down 4
+up 8
+down 2
+up 7
+up 3
+forward 7
+down 7
+down 4
+forward 6
+up 5
+forward 8
+down 4
+down 9
+forward 3
+down 6
+forward 3
+down 8
+down 5
+up 6
+down 8
+down 9
+down 4
+down 9
+forward 7
+down 4
+down 7
+forward 1
+down 8
+forward 9
+forward 1
+down 5
+down 3
+up 5
+forward 9
+down 7
+down 7
+up 3
+up 9
+down 4
+down 5
+forward 5
+down 5
+up 3
+forward 8
+down 5
+forward 1
+down 1
+up 6
+forward 1
+forward 4
+up 9
+up 5
+down 6
+down 7
+forward 8
+down 4
+forward 9
+forward 6
+down 7
+down 2
+up 1
+down 4
+down 5
+up 7
+down 7
+down 3
+up 8
+forward 8
+down 8
+forward 5
+down 6
+down 7
+forward 4
+up 7
+forward 9
+down 7
+up 7
+forward 2
+down 3
+down 7
+up 6
+forward 2
+down 1
+forward 1
+up 9
+forward 6
+forward 2
+forward 5
+up 1
+forward 3
+down 2
+up 2
+forward 4
+up 2
+down 2
+down 9
+up 9
+forward 2
+down 3
+down 2
+forward 9
+forward 9
+down 3
+down 6
+forward 3
+down 7
+up 6
+down 8
+forward 4
+forward 8
+forward 1
+down 7
+down 2
+forward 6
+forward 9
+up 6
+up 8
+down 4
+forward 9
+forward 9
+forward 1
+forward 4
+forward 3
+up 9
+down 8
+down 7
+down 4
+down 1
+down 9
+down 7
+forward 2
+forward 7
+forward 6
+down 7
+forward 2
+forward 1
+forward 8
+forward 9
+forward 2
+down 5
+down 9
+up 7
+forward 4
+up 4
+up 2
+down 1
+down 3
+down 4
+forward 1
+up 4
+up 1
+up 4
+down 6
+down 7
+forward 7
+down 4
+down 6
+forward 4
+forward 8
+down 2
+down 8
+down 1
+forward 1
+down 7
+down 1
+down 6
+up 2
+down 9
+forward 3
+down 7
+down 8
+down 9
+down 4
+down 7
+down 4
+up 1
+forward 1
+forward 2
+up 6
+up 6
+up 5
+forward 4
+down 3
+down 9
+forward 3
+up 5
+down 1
+forward 7
+down 6
+down 2
+up 3
+up 8
+up 5
+forward 4
+down 5
+forward 5
+forward 2
+down 3
+forward 3
+forward 9
+down 9
+down 9
+down 9
+forward 8
+forward 5
+up 1
+down 5
+forward 3
+forward 4
+forward 2
+up 1
+up 2
+up 8
+down 6
+up 4
+forward 3
+down 1
+down 6
+down 6
+up 7
+forward 7
+down 8
+up 2
+up 1
+up 5
+forward 4
+down 4
+down 8
+down 2
+down 5
+down 4
+up 4
+up 7
+forward 2
+forward 4
+forward 2
+down 6
+down 9
+up 3
+up 6
+forward 8
+forward 6
+forward 8
+forward 9
+down 7
+forward 9
+up 4
+up 5
+down 4
+down 7
+down 4
+up 8
+down 3
+forward 8
+down 2
+down 4
+forward 2
+up 6
+up 6
+down 9
+forward 6
+forward 8
+down 5
+forward 5
+down 3
+down 6
+up 9
+forward 2
+forward 8
+up 4
+forward 4
+forward 2
+down 4
+forward 3
+down 1
+up 4
+down 4
+up 7
+forward 2
+forward 8
+down 8
+up 7
+up 2
+down 7
+down 7
+forward 8
+forward 7
+forward 9
+down 4
+down 5
+down 9
+down 5
+forward 1
+down 5
+up 2
+forward 6
+forward 9
+down 3
+forward 5
+down 1
+forward 9
+up 2
+forward 1
+up 9
+forward 2
+up 2
+forward 4
+forward 3
+up 9
+forward 4
+forward 2
+up 7
+up 6
+down 3
+forward 7
+forward 1
+forward 6
+down 2
+down 8
+forward 5
+down 5
+up 5
+forward 5
+down 6
+forward 8
+forward 4
+down 2
+up 8
+forward 6
+down 2
+down 7
+forward 5
+down 4
+down 5
+up 6
+down 3
+up 6
+down 8
+forward 4
+down 8
+down 6
+forward 2
+forward 8
+up 8
+up 1
+forward 6
+down 2
+down 6
+forward 2
+forward 2
+down 8
+forward 7
+up 1
+forward 1
+down 8
+forward 3
+down 6
+forward 7
+forward 7
+up 7
+down 1
+forward 8
+up 7
+forward 8
+forward 8
+forward 2
+down 5
+up 7
+forward 1
+forward 9
+down 9
+forward 8
+down 6
+down 7
+up 4
+down 5
+forward 6
+down 8
+forward 5
+up 6
+up 4
+forward 8
+forward 5
+forward 1
+forward 3
+up 2
+down 3
+down 4
+down 2
+forward 3
+forward 2
+up 8
+up 1
+forward 5
+up 8
+down 1
+up 4
+down 6
+forward 1
+down 3
+up 8
+down 3
+forward 5
+down 7
+forward 3
+down 1
+up 8
+up 6
+down 4
+down 8
+up 2
+forward 1
+forward 8
+down 4
+down 8
+down 4
+up 7
+down 4
+forward 7
+forward 4
+forward 2
+forward 6
+up 4
+down 5
+forward 8
+forward 9
+down 1
+down 2
+down 2
+forward 6
+forward 1
+forward 4
+down 7
+forward 6
+forward 9
+down 5
+forward 9
+up 4
+down 2
+down 6
+forward 5
+forward 3
+forward 1
+forward 6
+forward 5
+forward 2
+down 9
+forward 1
+up 5
+down 2
+down 8
+up 5
+down 3
+up 1
+forward 5
+forward 8
+forward 2
+down 3
+down 7
+up 3
+up 8
+forward 5
+up 8
+forward 4
+down 7
+forward 4
+down 1
+forward 2
+forward 8
+up 9
+up 1
+forward 3
+down 6
+up 5
+down 9
+forward 8
+forward 3
+down 7
+forward 3
+up 9
+down 2
+forward 2
+down 6
+down 9
+down 4
+down 4
+down 7
+up 6
+up 2
+down 7
+forward 5
+up 1
+down 6
+up 2
+forward 8
+up 6
+forward 4
+down 2
+up 5
+down 6
+down 5
+forward 8
+forward 4
+down 5
+forward 5
+forward 3
+down 2
+forward 3
+up 3
+down 4
+up 2
+forward 9
+up 8
+forward 9
+up 5
+up 1
+forward 9
+down 8
+down 3
+forward 9
+up 4
+down 1
+forward 8
+down 6
+down 1
+down 2
+down 9
+down 1
+forward 5
+down 7
+forward 1
+up 6
+down 1
+down 6
+forward 6
+forward 9
+down 6
+forward 1
+forward 4
+up 4
+forward 1
+up 9
+forward 3
+forward 8
+down 3
+down 7
+forward 4
+up 1
+down 1
+forward 1
+down 3
+down 6
+down 9
+down 6
+forward 4
+down 1
+up 4
+forward 8
+down 6
+up 6
+down 5
+up 8
+forward 4
+up 7
+forward 4
+forward 2
+down 7
+forward 2
diff --git a/src/2021/2/mod.rs b/src/2021/2/mod.rs
new file mode 100644
index 0000000..528e1b2
--- /dev/null
+++ b/src/2021/2/mod.rs
@@ -0,0 +1,41 @@
+use anyhow::Context as _;
+use std::io::BufRead as _;
+
+pub fn part1() -> anyhow::Result<i64> {
+ let f = data!()?;
+ let f = std::io::BufReader::new(f);
+ let mut horizontal = 0;
+ let mut vertical = 0;
+ for line in f.lines() {
+ let line = line?;
+ if let Some(n) = line.strip_prefix("forward ") {
+ horizontal += n.parse::<i64>().unwrap();
+ } else if let Some(n) = line.strip_prefix("down ") {
+ vertical += n.parse::<i64>().unwrap();
+ } else if let Some(n) = line.strip_prefix("up ") {
+ vertical -= n.parse::<i64>().unwrap();
+ }
+ }
+ Ok(horizontal * vertical)
+}
+
+pub fn part2() -> anyhow::Result<i64> {
+ let f = data!()?;
+ let f = std::io::BufReader::new(f);
+ let mut aim = 0;
+ let mut horizontal = 0;
+ let mut vertical = 0;
+ for line in f.lines() {
+ let line = line?;
+ if let Some(n) = line.strip_prefix("forward ") {
+ let x = n.parse::<i64>().unwrap();
+ horizontal += x;
+ vertical += aim * x;
+ } else if let Some(n) = line.strip_prefix("down ") {
+ aim += n.parse::<i64>().unwrap();
+ } else if let Some(n) = line.strip_prefix("up ") {
+ aim -= n.parse::<i64>().unwrap();
+ }
+ }
+ Ok(horizontal * vertical)
+}
diff --git a/src/2021/mod.rs b/src/2021/mod.rs
index 6103c97..9909f65 100644
--- a/src/2021/mod.rs
+++ b/src/2021/mod.rs
@@ -1,11 +1,15 @@
#[path = "1/mod.rs"]
mod day1;
+#[path = "2/mod.rs"]
+mod day2;
// NEXT MOD
pub fn run(day: u8, puzzle: u8) -> anyhow::Result<i64> {
match (day, puzzle) {
(1, 1) => day1::part1(),
(1, 2) => day1::part2(),
+ (2, 1) => day2::part1(),
+ (2, 2) => day2::part2(),
// NEXT PART
_ => Err(anyhow::anyhow!("unknown puzzle {}-{}", day, puzzle)),
}