From 83e16885c7eacf8708c8e5111a1dd963c8164706 Mon Sep 17 00:00:00 2001 From: Parnic Date: Thu, 2 Dec 2021 10:03:00 -0600 Subject: [PATCH] Day 2 solution in C# --- .gitignore | 4 + advent-of-code-2021.csproj | 29 ++ advent-of-code-2021.sln | 25 + inputs/02.txt | 1000 ++++++++++++++++++++++++++++++++++++ src/02.cs | 91 ++++ src/Logger.cs | 13 + src/Timer.cs | 47 ++ src/main.cs | 1 + 8 files changed, 1210 insertions(+) create mode 100644 advent-of-code-2021.csproj create mode 100644 advent-of-code-2021.sln create mode 100644 inputs/02.txt create mode 100644 src/02.cs create mode 100644 src/Logger.cs create mode 100644 src/Timer.cs create mode 100644 src/main.cs diff --git a/.gitignore b/.gitignore index ea8c4bf..9f08bcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ /target +/.vs/ +*.user +/bin/ +/obj/ diff --git a/advent-of-code-2021.csproj b/advent-of-code-2021.csproj new file mode 100644 index 0000000..6284423 --- /dev/null +++ b/advent-of-code-2021.csproj @@ -0,0 +1,29 @@ + + + + Exe + net6.0 + aoc2021 + enable + enable + False + True + + + + 5 + True + + + + 5 + True + + + + + PreserveNewest + + + + diff --git a/advent-of-code-2021.sln b/advent-of-code-2021.sln new file mode 100644 index 0000000..c717677 --- /dev/null +++ b/advent-of-code-2021.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "advent-of-code-2021", "advent-of-code-2021.csproj", "{1B54D933-507B-4F44-9BE3-F1794B593AF7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1B54D933-507B-4F44-9BE3-F1794B593AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B54D933-507B-4F44-9BE3-F1794B593AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B54D933-507B-4F44-9BE3-F1794B593AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B54D933-507B-4F44-9BE3-F1794B593AF7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {17D280F0-AD9F-481E-8687-28AAB4A54437} + EndGlobalSection +EndGlobal diff --git a/inputs/02.txt b/inputs/02.txt new file mode 100644 index 0000000..36084d3 --- /dev/null +++ b/inputs/02.txt @@ -0,0 +1,1000 @@ +forward 9 +down 9 +up 4 +down 5 +down 6 +up 6 +down 7 +down 1 +forward 6 +down 4 +forward 8 +up 5 +forward 9 +down 1 +down 4 +up 4 +up 5 +up 4 +down 1 +forward 8 +down 1 +forward 2 +forward 8 +down 9 +forward 2 +down 6 +down 2 +up 8 +down 6 +forward 9 +forward 7 +down 6 +forward 3 +down 2 +forward 4 +down 5 +up 2 +down 9 +down 8 +up 5 +forward 5 +forward 4 +up 9 +forward 9 +down 8 +forward 8 +forward 2 +up 8 +down 7 +forward 8 +down 3 +forward 6 +up 9 +forward 9 +forward 4 +forward 9 +forward 6 +down 4 +up 2 +forward 4 +up 5 +up 6 +forward 9 +down 3 +forward 4 +forward 9 +down 1 +forward 1 +up 6 +up 4 +forward 7 +up 7 +up 3 +forward 2 +forward 8 +forward 6 +down 4 +forward 2 +forward 3 +down 7 +down 5 +down 8 +down 5 +forward 1 +down 8 +down 2 +down 8 +down 3 +forward 4 +forward 8 +forward 9 +down 1 +forward 8 +down 1 +down 6 +down 7 +down 7 +forward 5 +forward 3 +down 2 +down 1 +forward 2 +forward 1 +down 6 +down 4 +up 5 +up 9 +down 4 +forward 9 +down 2 +down 5 +down 4 +down 2 +forward 2 +forward 4 +forward 6 +forward 6 +forward 3 +down 6 +up 5 +forward 8 +forward 3 +down 9 +down 3 +forward 4 +forward 2 +down 9 +down 8 +down 7 +down 3 +forward 2 +down 7 +down 3 +down 5 +forward 6 +up 9 +up 8 +forward 5 +down 6 +down 1 +down 6 +down 5 +forward 7 +down 2 +forward 8 +forward 7 +forward 2 +forward 8 +up 6 +forward 5 +down 2 +down 5 +up 8 +up 6 +forward 1 +down 4 +up 5 +up 5 +up 5 +forward 4 +up 1 +forward 3 +down 9 +down 6 +up 1 +forward 1 +forward 2 +forward 1 +forward 4 +forward 6 +forward 6 +up 7 +down 7 +down 7 +down 9 +forward 9 +down 1 +down 5 +down 1 +down 7 +down 1 +up 6 +forward 2 +down 4 +up 3 +up 2 +forward 6 +up 4 +down 1 +down 5 +forward 9 +up 4 +up 3 +forward 3 +up 7 +forward 2 +forward 5 +down 9 +forward 7 +forward 4 +down 1 +up 2 +forward 4 +up 4 +down 2 +forward 4 +up 5 +up 1 +down 9 +down 3 +up 6 +forward 7 +up 7 +forward 2 +down 4 +up 3 +up 3 +forward 4 +up 5 +down 3 +up 8 +forward 6 +forward 8 +down 1 +down 9 +down 7 +forward 7 +forward 5 +forward 2 +up 9 +forward 3 +forward 1 +down 7 +down 6 +forward 5 +up 3 +forward 6 +down 4 +forward 9 +down 7 +forward 9 +down 9 +down 5 +down 6 +down 2 +down 2 +down 8 +down 3 +down 9 +forward 5 +up 6 +forward 1 +down 3 +down 2 +up 1 +up 6 +forward 3 +down 6 +down 6 +up 9 +up 8 +forward 2 +down 7 +forward 5 +up 9 +down 7 +down 3 +forward 2 +forward 2 +up 9 +forward 1 +forward 7 +down 9 +forward 6 +forward 7 +up 8 +down 7 +down 5 +down 3 +up 6 +down 5 +forward 6 +down 9 +down 6 +up 9 +down 7 +forward 2 +down 5 +up 4 +down 4 +down 8 +forward 7 +down 9 +forward 8 +forward 6 +down 7 +down 1 +forward 5 +up 6 +forward 4 +up 7 +up 4 +up 5 +forward 9 +forward 5 +forward 4 +down 6 +down 5 +forward 2 +forward 7 +down 8 +forward 3 +up 5 +down 2 +up 3 +forward 4 +up 5 +up 2 +forward 4 +forward 1 +forward 1 +forward 4 +forward 4 +down 2 +forward 1 +forward 1 +up 5 +up 7 +down 8 +down 4 +forward 2 +forward 2 +down 3 +forward 7 +down 8 +up 3 +forward 2 +down 2 +forward 3 +up 2 +forward 3 +up 6 +down 7 +up 7 +down 3 +up 9 +forward 3 +forward 7 +down 7 +up 9 +down 6 +down 2 +forward 8 +forward 8 +up 7 +down 6 +forward 2 +forward 1 +down 4 +up 2 +forward 6 +up 7 +down 5 +up 1 +forward 3 +forward 9 +up 4 +forward 5 +forward 8 +down 3 +up 5 +forward 9 +down 6 +up 9 +forward 5 +down 4 +down 1 +down 6 +up 9 +up 2 +forward 5 +down 1 +up 3 +down 5 +forward 2 +down 4 +forward 5 +down 6 +down 4 +down 4 +forward 1 +down 7 +down 2 +forward 4 +forward 5 +up 9 +down 6 +down 2 +forward 7 +up 8 +down 9 +forward 7 +down 5 +down 2 +down 8 +down 8 +up 4 +up 3 +down 3 +down 7 +forward 4 +forward 6 +down 4 +up 7 +forward 4 +forward 4 +forward 1 +down 3 +down 2 +forward 7 +forward 2 +up 9 +down 7 +up 7 +forward 2 +forward 6 +forward 9 +down 3 +forward 7 +forward 5 +up 5 +up 1 +forward 6 +forward 4 +down 2 +forward 3 +forward 9 +down 1 +forward 6 +forward 7 +forward 1 +up 7 +up 4 +forward 7 +forward 8 +down 7 +down 8 +down 9 +forward 7 +down 9 +up 6 +down 7 +up 3 +down 7 +forward 4 +forward 9 +forward 1 +down 4 +forward 1 +up 4 +up 4 +forward 9 +forward 8 +up 4 +down 2 +forward 4 +forward 2 +forward 8 +down 2 +up 6 +down 4 +forward 6 +forward 5 +down 2 +forward 9 +down 5 +forward 5 +down 3 +down 2 +up 9 +down 3 +forward 6 +forward 6 +up 9 +down 1 +forward 4 +up 3 +forward 1 +forward 3 +forward 3 +down 6 +down 2 +forward 8 +down 4 +forward 8 +forward 8 +forward 5 +up 6 +forward 3 +down 1 +down 8 +forward 3 +forward 4 +down 2 +down 7 +up 8 +forward 3 +forward 8 +up 2 +forward 6 +down 4 +forward 9 +forward 5 +down 1 +forward 6 +forward 2 +down 3 +up 4 +down 7 +down 2 +up 2 +forward 7 +down 6 +down 2 +up 5 +up 5 +down 9 +down 7 +down 3 +down 1 +down 9 +forward 4 +down 4 +forward 7 +forward 8 +forward 4 +up 6 +forward 6 +forward 9 +down 2 +forward 4 +down 8 +down 4 +forward 5 +forward 2 +up 4 +down 3 +up 8 +up 1 +down 1 +forward 9 +up 3 +up 1 +forward 1 +forward 7 +forward 1 +down 7 +forward 7 +forward 7 +down 7 +forward 4 +up 6 +forward 3 +down 1 +up 1 +up 8 +forward 5 +forward 2 +up 4 +forward 7 +down 2 +down 3 +down 8 +up 7 +up 5 +forward 8 +down 5 +down 3 +down 9 +forward 6 +forward 4 +down 9 +up 5 +forward 3 +up 7 +up 9 +up 1 +forward 1 +forward 3 +forward 1 +up 8 +up 4 +down 1 +down 8 +down 3 +down 1 +down 1 +down 9 +forward 4 +down 3 +forward 9 +forward 2 +down 1 +forward 9 +up 7 +forward 6 +up 4 +forward 8 +forward 3 +down 2 +down 2 +down 2 +up 5 +forward 1 +up 1 +forward 7 +down 1 +forward 1 +down 8 +up 4 +up 1 +forward 7 +down 8 +down 9 +forward 2 +forward 1 +up 3 +forward 4 +up 8 +forward 5 +down 2 +forward 6 +forward 8 +up 9 +forward 2 +down 7 +down 4 +up 3 +forward 1 +forward 6 +forward 9 +down 1 +down 8 +down 1 +down 2 +forward 3 +forward 9 +forward 2 +forward 4 +forward 7 +forward 3 +up 8 +up 9 +forward 3 +forward 6 +down 5 +up 6 +down 8 +forward 5 +up 4 +up 9 +forward 6 +forward 3 +up 9 +forward 8 +forward 5 +forward 9 +forward 7 +up 6 +forward 3 +forward 1 +up 4 +forward 9 +forward 8 +up 1 +up 2 +down 3 +down 4 +down 9 +down 4 +down 5 +down 6 +down 2 +down 5 +forward 6 +forward 4 +up 2 +up 7 +down 5 +down 9 +forward 3 +down 5 +forward 6 +down 7 +forward 1 +forward 7 +forward 9 +forward 7 +forward 4 +forward 4 +up 1 +up 4 +down 6 +up 2 +up 1 +down 4 +forward 2 +down 4 +forward 6 +down 3 +up 6 +down 2 +up 3 +forward 1 +forward 9 +forward 3 +up 9 +forward 7 +forward 5 +forward 4 +down 5 +down 9 +forward 6 +forward 7 +up 1 +forward 7 +forward 2 +forward 2 +forward 5 +forward 6 +down 3 +down 7 +down 3 +down 4 +down 6 +down 1 +forward 2 +down 8 +forward 4 +forward 7 +up 1 +down 4 +down 1 +down 2 +down 3 +up 3 +forward 9 +forward 2 +down 8 +up 3 +forward 8 +forward 7 +up 8 +down 8 +forward 2 +down 9 +down 9 +down 5 +forward 1 +forward 3 +forward 6 +up 1 +up 2 +forward 1 +down 3 +up 6 +forward 2 +forward 8 +forward 2 +down 3 +forward 8 +forward 9 +down 7 +down 3 +down 2 +down 9 +down 3 +up 6 +forward 9 +forward 5 +forward 1 +forward 9 +down 9 +up 2 +down 1 +up 6 +forward 6 +down 3 +forward 6 +forward 3 +forward 5 +forward 4 +up 2 +up 4 +up 6 +forward 1 +forward 6 +up 6 +up 4 +up 7 +down 8 +down 5 +up 1 +up 1 +down 5 +forward 5 +down 9 +forward 8 +down 3 +up 4 +down 9 +down 1 +forward 2 +forward 9 +down 3 +down 8 +down 5 +down 6 +forward 7 +forward 1 +down 9 +down 7 +forward 8 +forward 2 +up 1 +up 1 +forward 7 +up 1 +forward 2 +down 9 +up 4 +forward 5 +down 1 +up 1 +down 8 +down 3 +up 1 +down 8 +down 7 +down 2 +forward 9 +down 5 +forward 2 +up 2 +up 6 +up 4 +forward 6 +up 5 +forward 5 +forward 4 +forward 8 +down 8 +down 6 +down 1 +down 3 +down 6 +forward 8 +up 1 +up 5 +down 4 +forward 4 +down 9 +forward 4 +up 6 +down 7 +forward 4 +down 3 +down 4 +forward 1 +forward 3 +down 1 +down 7 +up 8 +down 3 +down 4 +down 3 +forward 3 +down 8 +forward 8 +down 3 +down 7 +forward 2 +up 2 +forward 7 +down 9 +up 7 +forward 5 +down 2 +down 5 +up 4 +up 8 +forward 8 +forward 9 +forward 8 +down 8 +forward 6 +forward 9 +forward 6 +forward 8 +forward 6 +forward 8 +forward 2 +down 7 +down 3 +forward 7 +down 4 +down 5 +up 1 +forward 5 +down 3 +down 7 +up 4 +forward 9 +down 2 +down 3 +forward 1 +up 6 +down 1 +down 9 +forward 8 +forward 9 +forward 2 +down 6 +down 4 +up 3 +up 8 +forward 1 +down 3 +up 8 +up 7 +down 4 +up 3 +down 7 +down 2 +down 5 +down 7 +down 2 +forward 2 +down 3 +up 2 +forward 8 +up 1 +forward 2 +up 4 +forward 1 +forward 8 +forward 6 +forward 2 +down 2 +forward 5 +up 4 +down 9 +down 7 +forward 2 +down 9 +down 9 +forward 6 +down 8 +down 4 +down 7 +down 9 +forward 7 +forward 7 +up 6 +forward 3 +forward 5 +forward 6 +down 8 +up 1 +forward 2 +up 4 +up 2 +down 8 +down 9 +down 1 +down 3 +forward 7 +forward 5 +forward 6 +up 6 +down 7 +up 8 +up 1 +forward 8 +down 5 +up 1 +down 2 +down 5 +forward 6 +down 4 +forward 5 +down 4 +forward 3 +down 5 +up 4 +up 7 +forward 2 +up 2 +down 8 +forward 6 \ No newline at end of file diff --git a/src/02.cs b/src/02.cs new file mode 100644 index 0000000..65ef9b4 --- /dev/null +++ b/src/02.cs @@ -0,0 +1,91 @@ +namespace aoc2021 +{ + internal class Day02 + { + internal static void Go() + { + var lines = File.ReadAllLines("inputs/02.txt"); + var instructions = new List(); + foreach (var instruction in lines) + { + var fmt = instruction.Split(' '); + instructions.Add(new Instruction() + { + Direction = fmt[0], + Amount = Convert.ToInt64(fmt[1]), + }); + } + + Part1(instructions); + Part2(instructions); + } + + struct Instruction + { + public string Direction; + public long Amount; + } + + struct Position + { + public long h; + public long d; + } + + private static void Part1(IEnumerable instructions) + { + Position pos = new(); + using (var t = new Timer()) + { + foreach (var instruction in instructions) + { + switch (instruction.Direction) + { + case "forward": + pos.h += instruction.Amount; + break; + + case "down": + pos.d += instruction.Amount; + break; + + case "up": + pos.d -= instruction.Amount; + break; + } + } + } + + Logger.Log($"part1: h: {pos.h}, d: {pos.d}, result: {pos.h * pos.d}"); + } + + private static void Part2(IEnumerable instructions) + { + Position pos = new(); + using (var t = new Timer()) + { + long aim = 0; + foreach (var instruction in instructions) + { + switch (instruction.Direction) + { + case "forward": + pos.h += instruction.Amount; + pos.d += aim * instruction.Amount; + break; + + case "down": + aim += instruction.Amount; + break; + + case "up": + aim -= instruction.Amount; + break; + } + } + } + + Logger.Log($"part2: h: {pos.h}, d: {pos.d}, result: {pos.h * pos.d}"); + } + } +} diff --git a/src/Logger.cs b/src/Logger.cs new file mode 100644 index 0000000..61e1a5c --- /dev/null +++ b/src/Logger.cs @@ -0,0 +1,13 @@ +using System.Diagnostics; + +namespace aoc2021 +{ + internal class Logger + { + public static void Log(string msg) + { + Console.WriteLine(msg); + Debug.WriteLine(msg); + } + } +} diff --git a/src/Timer.cs b/src/Timer.cs new file mode 100644 index 0000000..f2e0c7b --- /dev/null +++ b/src/Timer.cs @@ -0,0 +1,47 @@ +using System.Diagnostics; + +namespace aoc2021 +{ + internal class Timer : IDisposable + { + private readonly Stopwatch stopwatch = Stopwatch.StartNew(); + public void Dispose() + { + stopwatch.Stop(); + var (elapsed, unit) = ConvertElapsedToHumanReadable(); + Logger.Log($"Took {elapsed:N1}{unit}"); + } + + public (double elapsed, string unit) ConvertElapsedToHumanReadable() + { + return ConvertElapsedToHumanReadable(stopwatch.ElapsedTicks, Stopwatch.Frequency); + } + + public static (double elapsed, string unit) ConvertElapsedToHumanReadable(double ticks, long frequency) + { + var elapsed = 1.0d * ticks / frequency; + var unit = "s"; + if (elapsed < 0.001) + { + elapsed *= 1e+6; + unit = "us"; + } + else if (elapsed < 1) + { + elapsed *= 1000; + unit = "ms"; + } + else if (elapsed < 60) + { + unit = "s"; + } + else if (elapsed < 60 * 60) + { + elapsed /= 60; + unit = "m"; + } + + return (elapsed, unit); + } + } +} diff --git a/src/main.cs b/src/main.cs new file mode 100644 index 0000000..d5f1973 --- /dev/null +++ b/src/main.cs @@ -0,0 +1 @@ +aoc2021.Day02.Go();