diff --git a/aoc2021.test/DayTests.cs b/aoc2021.test/DayTests.cs
index 3bc1d84..9a10d38 100644
--- a/aoc2021.test/DayTests.cs
+++ b/aoc2021.test/DayTests.cs
@@ -5,6 +5,7 @@ public class DayTests
{
[DataTestMethod]
[DataRow(typeof(Day01), "1616", "1645")]
+ [DataRow(typeof(Day02), "2272262", "2134882034")]
public void CheckAllDays(Type dayType, string part1, string part2)
{
var s = Stopwatch.StartNew();
@@ -36,6 +37,7 @@ public class DayTests
[DataTestMethod]
[DataRow(typeof(Day01), "7", "5")]
+ [DataRow(typeof(Day02), "150", "900")]
public void CheckTestInputs(Type dayType, string part1, string part2)
{
Day.UseTestInput = true;
diff --git a/aoc2021/Day02.cs b/aoc2021/Day02.cs
new file mode 100644
index 0000000..a099520
--- /dev/null
+++ b/aoc2021/Day02.cs
@@ -0,0 +1,60 @@
+namespace aoc2021;
+
+///
+/// Day 2:
+///
+public sealed class Day02 : Day
+{
+ public Day02() : base(2, "Dive!")
+ {
+ }
+
+ public override string Part1()
+ {
+ int horiz = 0, depth = 0;
+ foreach (var line in Input)
+ {
+ var s = line.Split(' ');
+ var x = int.Parse(s[1]);
+ switch (s[0])
+ {
+ case "forward":
+ horiz += x;
+ break;
+ case "down":
+ depth += x;
+ break;
+ case "up":
+ depth -= x;
+ break;
+ }
+ }
+
+ return $"{horiz * depth}";
+ }
+
+ public override string Part2()
+ {
+ int aim = 0, depth = 0, horiz = 0;
+ foreach (var line in Input)
+ {
+ var s = line.Split(' ');
+ var x = int.Parse(s[1]);
+ switch (s[0])
+ {
+ case "forward":
+ horiz += x;
+ depth += aim * x;
+ break;
+ case "down":
+ aim += x;
+ break;
+ case "up":
+ aim -= x;
+ break;
+ }
+ }
+
+ return $"{horiz * depth}";
+ }
+}
diff --git a/aoc2021/aoc2021.csproj b/aoc2021/aoc2021.csproj
index 395175a..48c127c 100644
--- a/aoc2021/aoc2021.csproj
+++ b/aoc2021/aoc2021.csproj
@@ -14,11 +14,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/aoc2021/input/day02.in b/aoc2021/input/day02.in
new file mode 100644
index 0000000..4b708f6
--- /dev/null
+++ b/aoc2021/input/day02.in
@@ -0,0 +1,1000 @@
+forward 1
+forward 8
+down 9
+forward 3
+down 6
+down 1
+down 1
+forward 5
+forward 5
+forward 8
+down 6
+forward 7
+down 3
+down 4
+up 1
+forward 7
+forward 5
+forward 8
+down 1
+forward 9
+forward 9
+forward 7
+up 8
+forward 5
+forward 9
+down 3
+forward 2
+down 5
+down 4
+up 2
+up 5
+forward 3
+forward 8
+down 9
+down 1
+forward 2
+forward 6
+up 2
+up 9
+forward 8
+down 7
+forward 2
+up 5
+forward 7
+down 9
+forward 9
+forward 5
+down 8
+down 6
+forward 2
+up 4
+down 2
+down 9
+forward 4
+down 4
+forward 9
+down 8
+down 7
+down 4
+forward 6
+forward 9
+up 7
+down 2
+up 6
+down 8
+forward 3
+forward 9
+forward 7
+down 1
+forward 1
+forward 7
+forward 5
+down 4
+down 1
+forward 4
+forward 9
+forward 6
+down 5
+down 1
+forward 9
+down 6
+down 4
+forward 8
+up 8
+forward 9
+up 9
+up 9
+up 7
+forward 4
+down 4
+forward 4
+forward 2
+forward 2
+forward 9
+up 4
+forward 4
+forward 3
+forward 5
+down 3
+up 4
+forward 3
+forward 5
+forward 9
+forward 7
+down 1
+forward 4
+down 5
+up 6
+down 9
+forward 8
+down 1
+forward 3
+down 2
+up 8
+down 5
+down 8
+forward 5
+down 6
+forward 6
+down 7
+up 5
+forward 8
+forward 5
+forward 7
+up 3
+down 6
+up 9
+forward 1
+forward 7
+forward 3
+forward 8
+up 4
+up 9
+down 5
+forward 5
+forward 4
+forward 4
+down 9
+up 6
+forward 5
+forward 2
+down 6
+down 2
+forward 9
+down 7
+forward 8
+down 4
+forward 8
+forward 8
+up 7
+up 5
+forward 6
+forward 4
+up 4
+forward 2
+up 3
+down 8
+forward 1
+forward 8
+forward 8
+forward 4
+up 7
+forward 2
+down 8
+forward 1
+down 1
+down 4
+up 3
+forward 8
+forward 1
+down 9
+up 5
+down 5
+forward 9
+forward 4
+up 7
+down 2
+down 4
+forward 1
+forward 6
+up 8
+up 1
+forward 8
+down 5
+down 5
+forward 9
+down 8
+forward 9
+down 1
+up 7
+forward 8
+up 2
+down 2
+up 1
+up 9
+forward 6
+down 5
+forward 1
+down 2
+forward 5
+down 3
+up 8
+down 2
+down 8
+forward 7
+forward 2
+up 3
+forward 3
+down 1
+forward 4
+down 7
+up 5
+forward 8
+forward 8
+up 6
+up 4
+up 4
+down 7
+forward 2
+forward 1
+forward 6
+up 3
+forward 3
+forward 9
+down 4
+forward 2
+down 9
+down 8
+forward 5
+forward 2
+forward 4
+forward 5
+forward 7
+down 4
+up 5
+down 7
+forward 4
+up 7
+down 9
+down 4
+down 3
+forward 8
+down 5
+forward 8
+forward 8
+down 3
+down 8
+down 2
+forward 4
+forward 5
+down 7
+down 7
+down 6
+up 9
+down 9
+down 5
+forward 4
+down 1
+down 7
+up 4
+down 8
+up 5
+up 1
+down 9
+down 7
+forward 9
+forward 7
+down 6
+up 2
+forward 1
+down 8
+up 2
+forward 8
+down 2
+forward 2
+down 9
+forward 2
+forward 3
+forward 7
+up 3
+up 3
+up 3
+forward 5
+up 9
+up 1
+down 9
+down 4
+down 5
+up 9
+up 7
+down 9
+forward 3
+down 5
+down 6
+down 3
+up 6
+forward 8
+up 6
+up 8
+down 4
+forward 8
+down 8
+forward 7
+up 1
+forward 4
+down 2
+forward 7
+down 6
+up 8
+forward 1
+down 8
+down 4
+forward 7
+forward 2
+up 4
+forward 9
+forward 9
+down 8
+up 1
+down 3
+forward 7
+down 9
+forward 2
+forward 5
+down 4
+down 8
+down 3
+up 1
+down 2
+up 3
+forward 1
+forward 5
+forward 3
+down 2
+up 2
+forward 7
+down 6
+forward 3
+down 8
+forward 5
+forward 4
+up 2
+forward 4
+up 2
+down 4
+forward 8
+forward 5
+down 1
+forward 6
+down 2
+down 5
+up 8
+forward 5
+down 2
+up 5
+down 5
+forward 4
+forward 3
+forward 8
+down 9
+up 3
+forward 4
+forward 2
+forward 2
+forward 2
+down 4
+forward 8
+forward 5
+up 3
+down 1
+forward 3
+up 5
+forward 8
+down 6
+forward 6
+down 9
+forward 6
+up 5
+down 6
+up 9
+forward 8
+down 2
+forward 9
+down 7
+down 5
+down 4
+forward 3
+forward 2
+forward 1
+forward 7
+down 3
+forward 4
+up 6
+down 5
+down 4
+down 8
+down 4
+up 6
+forward 3
+down 4
+down 6
+forward 9
+forward 6
+up 4
+down 2
+down 7
+forward 2
+forward 9
+down 4
+down 8
+down 3
+down 4
+forward 9
+forward 4
+forward 1
+down 7
+forward 2
+up 1
+forward 7
+down 7
+forward 7
+forward 5
+up 8
+down 4
+up 7
+up 2
+up 7
+up 8
+down 9
+forward 8
+forward 8
+down 3
+forward 9
+down 3
+up 7
+down 1
+down 9
+forward 2
+up 4
+down 2
+forward 2
+up 5
+up 5
+up 1
+forward 7
+up 5
+down 3
+up 8
+down 9
+down 7
+up 4
+down 8
+down 4
+forward 8
+up 6
+down 2
+down 4
+forward 7
+forward 8
+forward 8
+forward 1
+down 4
+down 4
+forward 4
+down 7
+forward 3
+down 3
+down 6
+down 7
+down 6
+forward 8
+down 4
+down 7
+down 1
+down 7
+down 5
+down 2
+up 5
+forward 9
+down 3
+down 4
+down 4
+forward 5
+down 9
+forward 1
+up 1
+up 1
+down 3
+forward 8
+up 6
+up 6
+down 1
+up 2
+down 7
+down 9
+up 7
+forward 7
+down 6
+down 5
+down 5
+up 8
+forward 7
+down 1
+down 6
+forward 4
+forward 5
+forward 5
+forward 2
+down 5
+up 6
+down 5
+forward 1
+down 9
+up 4
+down 7
+down 8
+down 5
+down 8
+forward 7
+forward 2
+up 3
+down 7
+forward 1
+forward 4
+forward 5
+forward 1
+forward 7
+down 6
+forward 9
+forward 8
+down 5
+forward 5
+forward 8
+forward 3
+up 1
+forward 6
+forward 9
+forward 8
+down 3
+forward 8
+forward 7
+down 1
+forward 9
+down 9
+forward 6
+forward 4
+forward 2
+forward 9
+down 7
+down 6
+forward 4
+forward 1
+forward 3
+forward 9
+up 4
+down 5
+forward 6
+down 8
+up 5
+down 9
+down 6
+forward 7
+down 9
+forward 6
+forward 5
+down 1
+down 4
+up 6
+forward 2
+down 8
+down 5
+up 5
+forward 6
+forward 5
+down 8
+down 4
+down 3
+down 8
+forward 3
+forward 9
+up 6
+down 9
+down 1
+forward 7
+forward 5
+down 5
+down 1
+forward 7
+forward 3
+up 6
+forward 1
+up 9
+forward 1
+down 4
+down 3
+down 3
+up 6
+forward 9
+forward 5
+up 9
+up 5
+forward 5
+forward 7
+forward 9
+down 8
+forward 2
+down 7
+down 7
+forward 3
+down 2
+up 1
+down 4
+down 6
+down 8
+forward 8
+forward 6
+up 3
+forward 9
+down 8
+up 7
+forward 6
+forward 9
+up 8
+forward 3
+down 9
+forward 3
+forward 4
+down 3
+down 2
+forward 2
+down 5
+down 9
+down 2
+down 7
+down 4
+down 6
+forward 5
+up 1
+forward 9
+forward 2
+up 8
+forward 8
+down 3
+forward 7
+down 5
+forward 5
+down 5
+down 9
+down 9
+down 6
+down 5
+down 4
+up 6
+forward 9
+down 2
+down 5
+up 3
+forward 8
+forward 1
+down 4
+down 8
+forward 6
+forward 7
+up 2
+forward 1
+forward 2
+down 7
+down 6
+up 7
+forward 7
+down 6
+down 6
+down 8
+forward 8
+up 5
+up 9
+forward 8
+forward 1
+down 6
+down 6
+up 7
+forward 6
+up 5
+forward 7
+down 1
+forward 1
+forward 9
+up 7
+down 3
+forward 4
+down 6
+down 6
+up 5
+up 7
+down 1
+up 2
+down 8
+down 1
+forward 2
+down 3
+forward 8
+forward 2
+up 2
+down 7
+forward 5
+forward 7
+down 2
+up 1
+down 1
+down 6
+down 4
+up 1
+forward 2
+forward 7
+forward 8
+down 1
+forward 6
+down 5
+down 8
+up 6
+down 7
+forward 6
+down 8
+down 6
+down 9
+forward 8
+down 9
+down 6
+up 2
+down 2
+down 5
+down 5
+up 8
+forward 6
+forward 7
+up 4
+down 5
+up 5
+forward 6
+forward 8
+up 6
+up 7
+up 3
+up 9
+down 6
+forward 3
+forward 3
+down 6
+down 8
+down 2
+down 2
+up 7
+up 6
+forward 5
+forward 4
+down 2
+down 3
+forward 8
+down 9
+forward 3
+down 8
+down 8
+forward 9
+forward 7
+down 8
+down 7
+up 2
+down 8
+down 1
+down 7
+up 7
+forward 3
+forward 5
+up 1
+down 9
+forward 3
+down 4
+down 5
+down 3
+down 8
+up 7
+forward 4
+down 6
+forward 9
+forward 9
+forward 1
+up 6
+up 8
+forward 6
+down 6
+down 6
+forward 1
+up 4
+down 2
+forward 8
+forward 6
+down 2
+down 9
+down 6
+down 4
+forward 5
+down 5
+down 7
+down 6
+forward 8
+down 8
+down 2
+up 2
+up 2
+down 3
+forward 2
+down 2
+down 5
+down 3
+up 5
+down 8
+forward 8
+down 8
+down 4
+down 3
+forward 7
+forward 1
+forward 1
+down 7
+down 6
+down 2
+up 9
+up 7
+down 9
+forward 1
+down 3
+down 4
+down 7
+forward 6
+down 8
+forward 3
+down 6
+forward 4
+down 3
+down 5
+down 4
+forward 4
+up 4
+up 1
+up 2
+down 3
+forward 6
+up 6
+forward 8
+forward 9
+forward 3
+forward 4
+forward 2
+forward 8
+forward 7
+up 4
+down 5
+forward 8
+forward 6
+down 2
+forward 3
+down 5
+down 8
+forward 3
+forward 4
+down 3
+down 9
+down 6
+up 6
+down 1
+down 8
+forward 7
+down 3
+forward 8
+forward 4
+down 2
+up 7
+down 5
+forward 1
+forward 7
+forward 1
+forward 3
+down 8
+down 7
+forward 5
+forward 3
+down 1
+forward 7
+down 4
+down 3
+down 6
+down 9
+forward 6
+down 1
+forward 3
+forward 3
+forward 5
+forward 9
+up 3
+up 6
+forward 7
+up 5
+up 9
+down 2
+down 5
+up 5
+forward 4
+forward 4
+forward 6
+up 2
+down 9
+down 4
+down 2
+forward 7
+down 3
+up 4
+up 6
+forward 7
+forward 1
+forward 1
+down 7
+forward 5
+forward 4
+up 6
+forward 4
+forward 2
+forward 6
+up 1
+up 5
+forward 8
+up 2
+forward 3
+forward 5
+up 9
+down 4
+forward 1
+up 7
+down 5
+forward 7
+forward 2
+forward 8
+down 8
+down 2
+forward 2
+forward 4
+forward 8
+forward 1
+forward 8
+forward 2
+down 9
+forward 7
+down 7
+down 5
+up 9
+forward 5
+down 1
+down 9
+down 2
+forward 6
+down 8
+up 9
+forward 5
+down 2
+forward 1
+up 4
+forward 1
+down 9
+up 3
+down 3
+down 2
+forward 9
+down 5
+forward 4
+down 1
+forward 4
+down 8
+down 3
+forward 8
+forward 2
+forward 3
+down 1
+forward 1
+down 2
+forward 6
+up 3
+up 5
+up 9
+forward 9
+down 5
+down 5
+forward 4
+up 6
+down 7
+down 2
+forward 8
+forward 6
+forward 6
+up 6
+down 7
+forward 8
diff --git a/aoc2021/input/test02.in b/aoc2021/input/test02.in
new file mode 100644
index 0000000..b88bd7a
--- /dev/null
+++ b/aoc2021/input/test02.in
@@ -0,0 +1,6 @@
+forward 5
+down 5
+forward 8
+up 3
+down 8
+forward 2
\ No newline at end of file