Day 2 solution in C#

This commit is contained in:
2021-12-02 10:03:00 -06:00
parent 206b105e39
commit 83e16885c7
8 changed files with 1210 additions and 0 deletions

4
.gitignore vendored
View File

@ -1 +1,5 @@
/target /target
/.vs/
*.user
/bin/
/obj/

View File

@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>aoc2021</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>5</WarningLevel>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>5</WarningLevel>
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<None Update="inputs\02.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

25
advent-of-code-2021.sln Normal file
View File

@ -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

1000
inputs/02.txt Normal file

File diff suppressed because it is too large Load Diff

91
src/02.cs Normal file
View File

@ -0,0 +1,91 @@
namespace aoc2021
{
internal class Day02
{
internal static void Go()
{
var lines = File.ReadAllLines("inputs/02.txt");
var instructions = new List<Instruction>();
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<Instruction> 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<Instruction> 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}");
}
}
}

13
src/Logger.cs Normal file
View File

@ -0,0 +1,13 @@
using System.Diagnostics;
namespace aoc2021
{
internal class Logger
{
public static void Log(string msg)
{
Console.WriteLine(msg);
Debug.WriteLine(msg);
}
}
}

47
src/Timer.cs Normal file
View File

@ -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);
}
}
}

1
src/main.cs Normal file
View File

@ -0,0 +1 @@
aoc2021.Day02.Go();