Code formatting and warning fixing.
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
|
||||
[*]
|
||||
|
||||
# Microsoft .NET properties
|
||||
csharp_indent_braces = false
|
||||
csharp_new_line_before_members_in_object_initializers = false
|
||||
csharp_new_line_before_open_brace = accessors,anonymous_methods,control_blocks,events,indexers,lambdas,local_functions,methods,properties,types
|
||||
csharp_new_line_before_open_brace = accessors, anonymous_methods, control_blocks, events, indexers, lambdas, local_functions, methods, properties, types
|
||||
csharp_preferred_modifier_order = private, public, protected, internal, file, new, readonly, abstract, virtual, sealed, static, override, extern, unsafe, volatile, async, required:suggestion
|
||||
csharp_prefer_braces = true:none
|
||||
csharp_preserve_single_line_blocks = true
|
||||
|
||||
@@ -14,8 +14,8 @@ public static class DayHelper
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void RunDay(string eventName, int dayNumber)
|
||||
|
||||
private static void RunDay(string eventName, int dayNumber)
|
||||
{
|
||||
Console.WriteLine($"Day {dayNumber:00}");
|
||||
Console.WriteLine("------");
|
||||
@@ -63,8 +63,8 @@ public static class DayHelper
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
public static void RunDay(string eventName)
|
||||
|
||||
private static void RunDay(string eventName)
|
||||
{
|
||||
for (int currentDay = 1; currentDay < 25; currentDay++)
|
||||
{
|
||||
@@ -74,7 +74,7 @@ public static class DayHelper
|
||||
Console.WriteLine(string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void RunDay(string eventName, string[] args)
|
||||
{
|
||||
if (args.Length > 0)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<Solution>
|
||||
<Project Path="AdventOfCode.Common\AdventOfCode.Common.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2017.Tests\AdventOfCode2017.Tests.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2017\AdventOfCode2017.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2018.Tests\AdventOfCode2018.Tests.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2018\AdventOfCode2018.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2020.Tests\AdventOfCode2020.Tests.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2020\AdventOfCode2020.csproj" />
|
||||
<Project Path="AdventOfCode2023.Tests\AdventOfCode2023.Tests.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2023\AdventOfCode2023.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2024.Tests\AdventOfCode2024.Tests.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode2024\AdventOfCode2024.csproj" Type="Classic C#" />
|
||||
<Project Path="AdventOfCode.Common\AdventOfCode.Common.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2017.Tests\AdventOfCode2017.Tests.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2017\AdventOfCode2017.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2018.Tests\AdventOfCode2018.Tests.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2018\AdventOfCode2018.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2020.Tests\AdventOfCode2020.Tests.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2020\AdventOfCode2020.csproj"/>
|
||||
<Project Path="AdventOfCode2023.Tests\AdventOfCode2023.Tests.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2023\AdventOfCode2023.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2024.Tests\AdventOfCode2024.Tests.csproj" Type="Classic C#"/>
|
||||
<Project Path="AdventOfCode2024\AdventOfCode2024.csproj" Type="Classic C#"/>
|
||||
</Solution>
|
||||
@@ -1,24 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2017.Tests</RootNamespace>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2017.Tests</RootNamespace>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2017\AdventOfCode2017.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||
<PackageReference Include="xunit" Version="2.6.3"/>
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2017\AdventOfCode2017.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -9,7 +9,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "1122", });
|
||||
string result = day01.ResolvePart1(["1122"]);
|
||||
|
||||
Assert.Equal("3", result);
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "1111", });
|
||||
string result = day01.ResolvePart1(["1111"]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
@@ -29,7 +29,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "1234", });
|
||||
string result = day01.ResolvePart1(["1234"]);
|
||||
|
||||
Assert.Equal("0", result);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "91212129", });
|
||||
string result = day01.ResolvePart1(["91212129"]);
|
||||
|
||||
Assert.Equal("9", result);
|
||||
}
|
||||
@@ -47,13 +47,13 @@ public class Day01_Tests
|
||||
#endregion ResolvePart1
|
||||
|
||||
#region ResolvePart2
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Test1()
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "1212", });
|
||||
string result = day01.ResolvePart2(["1212"]);
|
||||
|
||||
Assert.Equal("6", result);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "1221", });
|
||||
string result = day01.ResolvePart2(["1221"]);
|
||||
|
||||
Assert.Equal("0", result);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "123425", });
|
||||
string result = day01.ResolvePart2(["123425"]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
@@ -83,7 +83,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "123123", });
|
||||
string result = day01.ResolvePart2(["123123"]);
|
||||
|
||||
Assert.Equal("12", result);
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "12131415", });
|
||||
string result = day01.ResolvePart2(["12131415"]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
|
||||
@@ -7,11 +7,11 @@ public class Day02_Tests
|
||||
{
|
||||
Day02 day02 = new();
|
||||
|
||||
string result = day02.ResolvePart1(new[] {
|
||||
string result = day02.ResolvePart1([
|
||||
"5 1 9 5",
|
||||
"7 5 3",
|
||||
"2 4 6 8",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("18", result);
|
||||
}
|
||||
@@ -21,11 +21,11 @@ public class Day02_Tests
|
||||
{
|
||||
Day02 day02 = new();
|
||||
|
||||
string result = day02.ResolvePart2(new[] {
|
||||
string result = day02.ResolvePart2([
|
||||
"5 9 2 8",
|
||||
"9 4 7 3",
|
||||
"3 8 6 5",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("9", result);
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="MSTest.TestAdapter" version="1.3.2" targetFramework="net461" />
|
||||
<package id="MSTest.TestFramework" version="1.3.2" targetFramework="net461" />
|
||||
</packages>
|
||||
@@ -1,20 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2017</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2017</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -48,10 +48,10 @@ public class Day01 : IDay
|
||||
{
|
||||
string input = inputs[0];
|
||||
int value = 0;
|
||||
for(int i = 0; i < input.Length; i++)
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
int nextI = (i + 1) % input.Length;
|
||||
if(input[i] == input[nextI])
|
||||
if (input[i] == input[nextI])
|
||||
{
|
||||
value += (input[i] - '0');
|
||||
}
|
||||
|
||||
@@ -51,10 +51,10 @@ public class Day02 : IDay
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
int checksum = 0;
|
||||
foreach(string input in inputs)
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
int[] row = input
|
||||
.Split(new[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Split([" ", " "], StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(cell => Convert.ToInt32(cell))
|
||||
.ToArray();
|
||||
int max = row.Max();
|
||||
@@ -70,7 +70,7 @@ public class Day02 : IDay
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
int[] row = input
|
||||
.Split(new[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Split([" ", " "], StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(cell => Convert.ToInt32(cell))
|
||||
.ToArray();
|
||||
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2018.Tests</RootNamespace>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2018.Tests</RootNamespace>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||
<PackageReference Include="xunit" Version="2.6.3"/>
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2018\AdventOfCode2018.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2018\AdventOfCode2018.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -9,7 +9,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "+1", "-2", "+3", "+1", });
|
||||
string result = day01.ResolvePart1(["+1", "-2", "+3", "+1"]);
|
||||
|
||||
Assert.Equal("3", result);
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "+1", "+1", "+1", });
|
||||
string result = day01.ResolvePart1(["+1", "+1", "+1"]);
|
||||
|
||||
Assert.Equal("3", result);
|
||||
}
|
||||
@@ -29,7 +29,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "+1", "+1", "-2", });
|
||||
string result = day01.ResolvePart1(["+1", "+1", "-2"]);
|
||||
|
||||
Assert.Equal("0", result);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart1(new[] { "-1", "-2", "-3", });
|
||||
string result = day01.ResolvePart1(["-1", "-2", "-3"]);
|
||||
|
||||
Assert.Equal("-6", result);
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "+1", "-2", "+3", "+1", });
|
||||
string result = day01.ResolvePart2(["+1", "-2", "+3", "+1"]);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "+1", "-1", });
|
||||
string result = day01.ResolvePart2(["+1", "-1"]);
|
||||
|
||||
Assert.Equal("0", result);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "+3", "+3", "+4", "-2", "-4", });
|
||||
string result = day01.ResolvePart2(["+3", "+3", "+4", "-2", "-4"]);
|
||||
|
||||
Assert.Equal("10", result);
|
||||
}
|
||||
@@ -83,7 +83,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "-6", "+3", "+8", "+5", "-6", });
|
||||
string result = day01.ResolvePart2(["-6", "+3", "+8", "+5", "-6"]);
|
||||
|
||||
Assert.Equal("5", result);
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class Day01_Tests
|
||||
{
|
||||
Day01 day01 = new();
|
||||
|
||||
string result = day01.ResolvePart2(new[] { "+7", "+7", "-2", "-7", "-4", });
|
||||
string result = day01.ResolvePart2(["+7", "+7", "-2", "-7", "-4"]);
|
||||
|
||||
Assert.Equal("14", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day02_Tests
|
||||
{
|
||||
Day02 day02 = new();
|
||||
|
||||
string result = day02.ResolvePart1(new[] {
|
||||
string result = day02.ResolvePart1([
|
||||
"abcdef",
|
||||
"bababc",
|
||||
"abbcde",
|
||||
@@ -15,7 +15,7 @@ public class Day02_Tests
|
||||
"aabcdd",
|
||||
"abcdee",
|
||||
"ababab",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("12", result);
|
||||
}
|
||||
@@ -25,7 +25,7 @@ public class Day02_Tests
|
||||
{
|
||||
Day02 day02 = new();
|
||||
|
||||
string result = day02.ResolvePart2(new[] {
|
||||
string result = day02.ResolvePart2([
|
||||
"abcde",
|
||||
"fghij",
|
||||
"klmno",
|
||||
@@ -33,7 +33,7 @@ public class Day02_Tests
|
||||
"fguij",
|
||||
"axcye",
|
||||
"wvxyz",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("fgij", result);
|
||||
}
|
||||
|
||||
@@ -90,17 +90,17 @@ public class Day03_Tests
|
||||
}
|
||||
|
||||
#endregion Claim_Overlaps
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Test()
|
||||
{
|
||||
Day03 day03 = new();
|
||||
|
||||
string result = day03.ResolvePart1(new[] {
|
||||
string result = day03.ResolvePart1([
|
||||
"#1 @ 1,3: 4x4",
|
||||
"#2 @ 3,1: 4x4",
|
||||
"#3 @ 5,5: 2x2",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
@@ -110,11 +110,11 @@ public class Day03_Tests
|
||||
{
|
||||
Day03 day03 = new();
|
||||
|
||||
string result = day03.ResolvePart2(new[] {
|
||||
string result = day03.ResolvePart2([
|
||||
"#1 @ 1,3: 4x4",
|
||||
"#2 @ 3,1: 4x4",
|
||||
"#3 @ 5,5: 2x2",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("3", result);
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public class Day04_Tests
|
||||
[Fact]
|
||||
public void GuardEvent_FromStringArray__TestBase()
|
||||
{
|
||||
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray(new[] {
|
||||
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray([
|
||||
"[1518-11-01 00:00] Guard #10 begins shift",
|
||||
"[1518-11-01 00:05] falls asleep",
|
||||
"[1518-11-01 00:25] wakes up",
|
||||
@@ -59,7 +59,7 @@ public class Day04_Tests
|
||||
"[1518-11-01 23:58] Guard #99 begins shift",
|
||||
"[1518-11-02 00:40] falls asleep",
|
||||
"[1518-11-02 00:50] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal(10, guardEvents[0].ID);
|
||||
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[0].Type);
|
||||
@@ -89,7 +89,7 @@ public class Day04_Tests
|
||||
[Fact]
|
||||
public void GuardEvent_FromStringArray__TestBaseUnsorted()
|
||||
{
|
||||
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray(new[] {
|
||||
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray([
|
||||
"[1518-11-01 00:00] Guard #10 begins shift",
|
||||
"[1518-11-01 23:58] Guard #99 begins shift",
|
||||
"[1518-11-01 00:30] falls asleep",
|
||||
@@ -98,7 +98,7 @@ public class Day04_Tests
|
||||
"[1518-11-02 00:50] wakes up",
|
||||
"[1518-11-01 00:55] wakes up",
|
||||
"[1518-11-01 00:25] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal(10, guardEvents[0].ID);
|
||||
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[0].Type);
|
||||
@@ -126,13 +126,13 @@ public class Day04_Tests
|
||||
}
|
||||
|
||||
#endregion GuardEvent_FromStringArray
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__BaseStatement()
|
||||
{
|
||||
Day04 day04 = new();
|
||||
|
||||
string result = day04.ResolvePart1(new[] {
|
||||
string result = day04.ResolvePart1([
|
||||
"[1518-11-01 00:00] Guard #10 begins shift",
|
||||
"[1518-11-01 00:05] falls asleep",
|
||||
"[1518-11-01 00:25] wakes up",
|
||||
@@ -150,7 +150,7 @@ public class Day04_Tests
|
||||
"[1518-11-05 00:03] Guard #99 begins shift",
|
||||
"[1518-11-05 00:45] falls asleep",
|
||||
"[1518-11-05 00:55] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("240", result);
|
||||
}
|
||||
@@ -160,7 +160,7 @@ public class Day04_Tests
|
||||
{
|
||||
Day04 day04 = new();
|
||||
|
||||
string result = day04.ResolvePart1(new[] {
|
||||
string result = day04.ResolvePart1([
|
||||
"[1518-11-04 00:36] falls asleep",
|
||||
"[1518-11-04 00:46] wakes up",
|
||||
"[1518-11-05 00:03] Guard #99 begins shift",
|
||||
@@ -178,7 +178,7 @@ public class Day04_Tests
|
||||
"[1518-11-01 00:55] wakes up",
|
||||
"[1518-11-01 23:58] Guard #99 begins shift",
|
||||
"[1518-11-05 00:55] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("240", result);
|
||||
}
|
||||
@@ -189,7 +189,7 @@ public class Day04_Tests
|
||||
{
|
||||
Day04 day04 = new();
|
||||
|
||||
string result = day04.ResolvePart2(new[] {
|
||||
string result = day04.ResolvePart2([
|
||||
"[1518-11-01 00:00] Guard #10 begins shift",
|
||||
"[1518-11-01 00:05] falls asleep",
|
||||
"[1518-11-01 00:25] wakes up",
|
||||
@@ -207,7 +207,7 @@ public class Day04_Tests
|
||||
"[1518-11-05 00:03] Guard #99 begins shift",
|
||||
"[1518-11-05 00:45] falls asleep",
|
||||
"[1518-11-05 00:55] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4455", result);
|
||||
}
|
||||
@@ -217,7 +217,7 @@ public class Day04_Tests
|
||||
{
|
||||
Day04 day04 = new();
|
||||
|
||||
string result = day04.ResolvePart2(new[] {
|
||||
string result = day04.ResolvePart2([
|
||||
"[1518-11-04 00:36] falls asleep",
|
||||
"[1518-11-04 00:46] wakes up",
|
||||
"[1518-11-05 00:03] Guard #99 begins shift",
|
||||
@@ -235,7 +235,7 @@ public class Day04_Tests
|
||||
"[1518-11-01 00:55] wakes up",
|
||||
"[1518-11-01 23:58] Guard #99 begins shift",
|
||||
"[1518-11-05 00:55] wakes up",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4455", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day05_Tests
|
||||
{
|
||||
Day05 day05 = new();
|
||||
|
||||
string result = day05.ResolvePart1(new[] { "dabAcCaCBAcCcaDA" });
|
||||
string result = day05.ResolvePart1(["dabAcCaCBAcCcaDA"]);
|
||||
|
||||
Assert.Equal("10", result);
|
||||
}
|
||||
@@ -17,7 +17,7 @@ public class Day05_Tests
|
||||
{
|
||||
Day05 day05 = new();
|
||||
|
||||
string result = day05.ResolvePart2(new[] { "dabAcCaCBAcCcaDA" });
|
||||
string result = day05.ResolvePart2(["dabAcCaCBAcCcaDA"]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
|
||||
@@ -64,14 +64,14 @@ public class Day06_Tests
|
||||
{
|
||||
Day06 day06 = new();
|
||||
|
||||
string result = day06.ResolvePart1(new[] {
|
||||
string result = day06.ResolvePart1([
|
||||
"1, 1",
|
||||
"1, 6",
|
||||
"8, 3",
|
||||
"3, 4",
|
||||
"5, 5",
|
||||
"8, 9",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("17", result);
|
||||
}
|
||||
@@ -79,16 +79,16 @@ public class Day06_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Test()
|
||||
{
|
||||
Day06 day06 = new() { DistanceThresold = 32, };
|
||||
Day06 day06 = new() { DistanceThreshold = 32, };
|
||||
|
||||
string result = day06.ResolvePart2(new[] {
|
||||
string result = day06.ResolvePart2([
|
||||
"1, 1",
|
||||
"1, 6",
|
||||
"8, 3",
|
||||
"3, 4",
|
||||
"5, 5",
|
||||
"8, 9",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("16", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day07_Tests
|
||||
{
|
||||
Day07 day07 = new();
|
||||
|
||||
string result = day07.ResolvePart1(new[] {
|
||||
string result = day07.ResolvePart1([
|
||||
"Step C must be finished before step A can begin.",
|
||||
"Step C must be finished before step F can begin.",
|
||||
"Step A must be finished before step B can begin.",
|
||||
@@ -15,7 +15,7 @@ public class Day07_Tests
|
||||
"Step B must be finished before step E can begin.",
|
||||
"Step D must be finished before step E can begin.",
|
||||
"Step F must be finished before step E can begin.",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("CABDFE", result);
|
||||
}
|
||||
@@ -25,7 +25,7 @@ public class Day07_Tests
|
||||
{
|
||||
Day07 day07 = new() { BaseCost = 0, NumberOfWorkers = 2 };
|
||||
|
||||
string result = day07.ResolvePart2(new[] {
|
||||
string result = day07.ResolvePart2([
|
||||
"Step C must be finished before step A can begin.",
|
||||
"Step C must be finished before step F can begin.",
|
||||
"Step A must be finished before step B can begin.",
|
||||
@@ -33,7 +33,7 @@ public class Day07_Tests
|
||||
"Step B must be finished before step E can begin.",
|
||||
"Step D must be finished before step E can begin.",
|
||||
"Step F must be finished before step E can begin.",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("15", result);
|
||||
}
|
||||
|
||||
@@ -28,13 +28,13 @@ public class Day08_Tests
|
||||
Assert.Single(result.Childs[1].Childs[0].Metadata);
|
||||
Assert.Equal(99, result.Childs[1].Childs[0].Metadata[0]);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Test()
|
||||
{
|
||||
Day08 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2", });
|
||||
string result = day.ResolvePart1(["2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2"]);
|
||||
|
||||
Assert.Equal("138", result);
|
||||
}
|
||||
@@ -44,7 +44,7 @@ public class Day08_Tests
|
||||
{
|
||||
Day08 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] { "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2", });
|
||||
string result = day.ResolvePart2(["2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2"]);
|
||||
|
||||
Assert.Equal("66", result);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
public class Day09_Tests
|
||||
{
|
||||
#region MarbleGame_PlayGame
|
||||
|
||||
|
||||
[Fact]
|
||||
public void MarbleGame_PlayGame__Test1()
|
||||
{
|
||||
@@ -69,15 +69,15 @@ public class Day09_Tests
|
||||
|
||||
Assert.Equal(37305, highScore);
|
||||
}
|
||||
|
||||
|
||||
#endregion MarbleGame_PlayGame
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Test1()
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "9 players; last marble is worth 25 points" });
|
||||
string result = day.ResolvePart1(["9 players; last marble is worth 25 points"]);
|
||||
|
||||
Assert.Equal("32", result);
|
||||
}
|
||||
@@ -87,7 +87,7 @@ public class Day09_Tests
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "10 players; last marble is worth 1618 points" });
|
||||
string result = day.ResolvePart1(["10 players; last marble is worth 1618 points"]);
|
||||
|
||||
Assert.Equal("8317", result);
|
||||
}
|
||||
@@ -97,7 +97,7 @@ public class Day09_Tests
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "13 players; last marble is worth 7999 points" });
|
||||
string result = day.ResolvePart1(["13 players; last marble is worth 7999 points"]);
|
||||
|
||||
Assert.Equal("146373", result);
|
||||
}
|
||||
@@ -107,7 +107,7 @@ public class Day09_Tests
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "17 players; last marble is worth 1104 points" });
|
||||
string result = day.ResolvePart1(["17 players; last marble is worth 1104 points"]);
|
||||
|
||||
Assert.Equal("2764", result);
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public class Day09_Tests
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "21 players; last marble is worth 6111 points" });
|
||||
string result = day.ResolvePart1(["21 players; last marble is worth 6111 points"]);
|
||||
|
||||
Assert.Equal("54718", result);
|
||||
}
|
||||
@@ -127,7 +127,7 @@ public class Day09_Tests
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "30 players; last marble is worth 5807 points" });
|
||||
string result = day.ResolvePart1(["30 players; last marble is worth 5807 points"]);
|
||||
|
||||
Assert.Equal("37305", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day10_Tests
|
||||
{
|
||||
Day10 day = new() { Width = 12, Height = 10 };
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"position=< 9, 1> velocity=< 0, 2>",
|
||||
"position=< 7, 0> velocity=<-1, 0>",
|
||||
"position=< 3, -2> velocity=<-1, 1>",
|
||||
@@ -39,7 +39,7 @@ public class Day10_Tests
|
||||
"position=< 5, 9> velocity=< 1, -2>",
|
||||
"position=<14, 7> velocity=<-2, 0>",
|
||||
"position=<-3, 6> velocity=< 2, -1>",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal(
|
||||
Environment.NewLine + "............" +
|
||||
@@ -59,7 +59,7 @@ public class Day10_Tests
|
||||
{
|
||||
Day10 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"position=< 9, 1> velocity=< 0, 2>",
|
||||
"position=< 7, 0> velocity=<-1, 0>",
|
||||
"position=< 3, -2> velocity=<-1, 1>",
|
||||
@@ -91,7 +91,7 @@ public class Day10_Tests
|
||||
"position=< 5, 9> velocity=< 1, -2>",
|
||||
"position=<14, 7> velocity=<-2, 0>",
|
||||
"position=<-3, 6> velocity=< 2, -1>",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("3", result);
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class Day11_Tests
|
||||
public void ResolvePart2__Test1()
|
||||
{
|
||||
Day11 day = new();
|
||||
string result = day.ResolvePart2(new[] { "18" });
|
||||
string result = day.ResolvePart2(["18"]);
|
||||
Assert.Equal("90,269,16", result);
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class Day11_Tests
|
||||
public void ResolvePart2__Test2()
|
||||
{
|
||||
Day11 day = new();
|
||||
string result = day.ResolvePart2(new[] { "42" });
|
||||
string result = day.ResolvePart2(["42"]);
|
||||
Assert.Equal("232,251,12", result);
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,7 @@ public class Day12_Tests
|
||||
{
|
||||
Day12 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[]
|
||||
{
|
||||
string result = day.ResolvePart1([
|
||||
"initial state: #..#.#..##......###...###",
|
||||
"",
|
||||
"...## => #",
|
||||
@@ -25,7 +24,7 @@ public class Day12_Tests
|
||||
"###.. => #",
|
||||
"###.# => #",
|
||||
"####. => #",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("325", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day13_Tests
|
||||
{
|
||||
Day13 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"|",
|
||||
"v",
|
||||
"|",
|
||||
@@ -15,7 +15,7 @@ public class Day13_Tests
|
||||
"|",
|
||||
"^",
|
||||
"|",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("0,3", result);
|
||||
}
|
||||
@@ -25,14 +25,14 @@ public class Day13_Tests
|
||||
{
|
||||
Day13 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
@"/->-\ ",
|
||||
@"| | /----\",
|
||||
@"| /-+--+-\ |",
|
||||
@"| | | | v |",
|
||||
@"\-+-/ \-+--/",
|
||||
@" \------/ ",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("7,3", result);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ public class Day13_Tests
|
||||
{
|
||||
Day13 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
@"/>-<\ ",
|
||||
@"| | ",
|
||||
@"| /<+-\",
|
||||
@@ -50,7 +50,7 @@ public class Day13_Tests
|
||||
@"\>+</ |",
|
||||
@" | ^",
|
||||
@" \<->/",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("6,4", result);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "9", });
|
||||
string result = day.ResolvePart1(["9"]);
|
||||
|
||||
Assert.Equal("5158916779", result);
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "5", });
|
||||
string result = day.ResolvePart1(["5"]);
|
||||
|
||||
Assert.Equal("0124515891", result);
|
||||
}
|
||||
@@ -29,7 +29,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "18", });
|
||||
string result = day.ResolvePart1(["18"]);
|
||||
|
||||
Assert.Equal("9251071085", result);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] { "2018", });
|
||||
string result = day.ResolvePart1(["2018"]);
|
||||
|
||||
Assert.Equal("5941429882", result);
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] { "51589", });
|
||||
string result = day.ResolvePart2(["51589"]);
|
||||
|
||||
Assert.Equal("9", result);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] { "01245", });
|
||||
string result = day.ResolvePart2(["01245"]);
|
||||
|
||||
Assert.Equal("5", result);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] { "92510", });
|
||||
string result = day.ResolvePart2(["92510"]);
|
||||
|
||||
Assert.Equal("18", result);
|
||||
}
|
||||
@@ -83,7 +83,7 @@ public class Day14_Tests
|
||||
{
|
||||
Day14 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] { "59414", });
|
||||
string result = day.ResolvePart2(["59414"]);
|
||||
|
||||
Assert.Equal("2018", result);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#######",
|
||||
"#.G...#",
|
||||
"#...EG#",
|
||||
@@ -17,7 +17,7 @@ public class Day15_Tests
|
||||
"#..G#E#",
|
||||
"#.....#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("27730", result);
|
||||
}
|
||||
@@ -27,7 +27,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#######",
|
||||
"#G..#E#",
|
||||
"#E#E.E#",
|
||||
@@ -35,17 +35,17 @@ public class Day15_Tests
|
||||
"#...#E#",
|
||||
"#...E.#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("36334", result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Test3()
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#######",
|
||||
"#E..EG#",
|
||||
"#.#G.E#",
|
||||
@@ -53,7 +53,7 @@ public class Day15_Tests
|
||||
"#G..#.#",
|
||||
"#..E#.#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("39514", result);
|
||||
}
|
||||
@@ -63,7 +63,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#######",
|
||||
"#E.G#.#",
|
||||
"#.#G..#",
|
||||
@@ -71,7 +71,7 @@ public class Day15_Tests
|
||||
"#G..#.#",
|
||||
"#...E.#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("27755", result);
|
||||
}
|
||||
@@ -81,7 +81,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#######",
|
||||
"#.E...#",
|
||||
"#.#..G#",
|
||||
@@ -89,7 +89,7 @@ public class Day15_Tests
|
||||
"#E#G#G#",
|
||||
"#...#G#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("28944", result);
|
||||
}
|
||||
@@ -99,7 +99,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"#########",
|
||||
"#G......#",
|
||||
"#.E.#...#",
|
||||
@@ -109,7 +109,7 @@ public class Day15_Tests
|
||||
"#.G...G.#",
|
||||
"#.....G.#",
|
||||
"#########",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("18740", result);
|
||||
}
|
||||
@@ -123,7 +123,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"#######",
|
||||
"#.G...#",
|
||||
"#...EG#",
|
||||
@@ -131,17 +131,17 @@ public class Day15_Tests
|
||||
"#..G#E#",
|
||||
"#.....#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4988", result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Test3()
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"#######",
|
||||
"#E..EG#",
|
||||
"#.#G.E#",
|
||||
@@ -149,7 +149,7 @@ public class Day15_Tests
|
||||
"#G..#.#",
|
||||
"#..E#.#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("31284", result);
|
||||
}
|
||||
@@ -159,7 +159,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"#######",
|
||||
"#E.G#.#",
|
||||
"#.#G..#",
|
||||
@@ -167,7 +167,7 @@ public class Day15_Tests
|
||||
"#G..#.#",
|
||||
"#...E.#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("3478", result);
|
||||
}
|
||||
@@ -177,7 +177,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"#######",
|
||||
"#.E...#",
|
||||
"#.#..G#",
|
||||
@@ -185,7 +185,7 @@ public class Day15_Tests
|
||||
"#E#G#G#",
|
||||
"#...#G#",
|
||||
"#######",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("6474", result);
|
||||
}
|
||||
@@ -195,7 +195,7 @@ public class Day15_Tests
|
||||
{
|
||||
Day15 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"#########",
|
||||
"#G......#",
|
||||
"#.E.#...#",
|
||||
@@ -205,7 +205,7 @@ public class Day15_Tests
|
||||
"#.G...G.#",
|
||||
"#.....G.#",
|
||||
"#########",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("1140", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day16_Tests
|
||||
{
|
||||
Day16 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"Before: [3, 2, 1, 1]",
|
||||
"9 2 1 2",
|
||||
"After: [3, 2, 2, 1]",
|
||||
@@ -18,7 +18,7 @@ public class Day16_Tests
|
||||
"",
|
||||
"",
|
||||
"Garbage",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ public class Day23_Tests
|
||||
{
|
||||
Day23 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"pos=<0,0,0>, r=4",
|
||||
"pos=<1,0,0>, r=1",
|
||||
"pos=<4,0,0>, r=3",
|
||||
@@ -17,7 +17,7 @@ public class Day23_Tests
|
||||
"pos=<1,1,1>, r=1",
|
||||
"pos=<1,1,2>, r=1",
|
||||
"pos=<1,3,1>, r=1",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("7", result);
|
||||
}
|
||||
@@ -27,14 +27,14 @@ public class Day23_Tests
|
||||
{
|
||||
Day23 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"pos=<10,12,12>, r=2",
|
||||
"pos=<12,14,12>, r=2",
|
||||
"pos=<16,12,12>, r=4",
|
||||
"pos=<14,14,14>, r=6",
|
||||
"pos=<50,50,50>, r=200",
|
||||
"pos=<10,10,10>, r=5",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("36", result);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="MSTest.TestAdapter" version="1.4.0" targetFramework="net461" />
|
||||
<package id="MSTest.TestFramework" version="1.4.0" targetFramework="net461" />
|
||||
<package id="MSTest.TestAdapter" version="1.4.0" targetFramework="net461"/>
|
||||
<package id="MSTest.TestFramework" version="1.4.0" targetFramework="net461"/>
|
||||
</packages>
|
||||
@@ -1,20 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2018</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2018</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -63,8 +63,7 @@ public class Day01 : IDay
|
||||
int accumulator = 0;
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
int intInput;
|
||||
if (int.TryParse(input.Substring(1), out intInput))
|
||||
if (int.TryParse(input.Substring(1), out int intInput))
|
||||
{
|
||||
if (input[0] == '-')
|
||||
{
|
||||
@@ -90,8 +89,7 @@ public class Day01 : IDay
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
accumulatorHistory.Add(accumulator);
|
||||
int intInput;
|
||||
if (int.TryParse(input.Substring(1), out intInput))
|
||||
if (int.TryParse(input.Substring(1), out int intInput))
|
||||
{
|
||||
if (input[0] == '-')
|
||||
{
|
||||
|
||||
@@ -50,7 +50,7 @@ What letters are common between the two correct box IDs? (In the example above,
|
||||
|
||||
public class Day02 : IDay
|
||||
{
|
||||
private int CountOccurrencesOfLetter(string text, char letter)
|
||||
private static int CountOccurrencesOfLetter(string text, char letter)
|
||||
{
|
||||
return text.Count(c => (c == letter));
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public class Day02 : IDay
|
||||
int tripletsCount = 0;
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
var hasPairsAndTriplets = HasPairsAndTriplets(input);
|
||||
Tuple<bool, bool> hasPairsAndTriplets = HasPairsAndTriplets(input);
|
||||
if (hasPairsAndTriplets.Item1) { pairsCount++; }
|
||||
if (hasPairsAndTriplets.Item2) { tripletsCount++; }
|
||||
}
|
||||
@@ -104,11 +104,10 @@ public class Day02 : IDay
|
||||
{
|
||||
for (int j = (i + 1); j < inputs.Length; j++)
|
||||
{
|
||||
var result = CompareIDPair(inputs[i], inputs[j]);
|
||||
Tuple<int, string> result = CompareIDPair(inputs[i], inputs[j]);
|
||||
if (result.Item1 == 1) { return result.Item2; }
|
||||
}
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -60,7 +60,7 @@ public class Day03 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
List<Claim> claims = inputs.Select(i => Claim.FromString(i)).ToList();
|
||||
List<Claim> claims = inputs.Select(Claim.FromString).ToList();
|
||||
|
||||
const int edgeSize = 1000;
|
||||
int[,] cells = new int[edgeSize, edgeSize];
|
||||
@@ -92,9 +92,9 @@ public class Day03 : IDay
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
List<Claim> claims = inputs.Select(i => Claim.FromString(i)).ToList();
|
||||
List<Claim> claims = inputs.Select(Claim.FromString).ToList();
|
||||
|
||||
Claim unoverlappingClaim = null;
|
||||
Claim unOverlappingClaim = null;
|
||||
for (int i = 0; i < claims.Count; i++)
|
||||
{
|
||||
bool overlaps = false;
|
||||
@@ -109,29 +109,43 @@ public class Day03 : IDay
|
||||
}
|
||||
if (overlaps == false)
|
||||
{
|
||||
unoverlappingClaim = claims[i];
|
||||
unOverlappingClaim = claims[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return unoverlappingClaim.ID.ToString();
|
||||
return unOverlappingClaim.ID.ToString();
|
||||
|
||||
}
|
||||
|
||||
public class Claim
|
||||
{
|
||||
public int ID { get; set; }
|
||||
public int ID { get; private set; }
|
||||
|
||||
public int Left { get; set; }
|
||||
public int Top { get; set; }
|
||||
public int Left { get; private set; }
|
||||
public int Top { get; private set; }
|
||||
|
||||
public int Width { get; set; }
|
||||
public int Height { get; set; }
|
||||
public int Width { get; private set; }
|
||||
public int Height { get; private set; }
|
||||
|
||||
public int MinX { get { return Left; } }
|
||||
public int MaxX { get { return Left + Width; } }
|
||||
private int MinX
|
||||
{
|
||||
get { return Left; }
|
||||
}
|
||||
|
||||
public int MinY { get { return Top; } }
|
||||
public int MaxY { get { return Top + Height; } }
|
||||
private int MaxX
|
||||
{
|
||||
get { return Left + Width; }
|
||||
}
|
||||
|
||||
private int MinY
|
||||
{
|
||||
get { return Top; }
|
||||
}
|
||||
|
||||
private int MaxY
|
||||
{
|
||||
get { return Top + Height; }
|
||||
}
|
||||
|
||||
public int GetArea()
|
||||
{
|
||||
@@ -141,7 +155,7 @@ public class Day03 : IDay
|
||||
public static Claim FromString(string strClaim)
|
||||
{
|
||||
Claim claim = new();
|
||||
string[] parts = strClaim.Split(new[] { " @ ", ",", ": ", "x", }, StringSplitOptions.None);
|
||||
string[] parts = strClaim.Split([" @ ", ",", ": ", "x"], StringSplitOptions.None);
|
||||
claim.ID = Convert.ToInt32(parts[0].Substring(1));
|
||||
claim.Left = Convert.ToInt32(parts[1]);
|
||||
claim.Top = Convert.ToInt32(parts[2]);
|
||||
|
||||
@@ -68,14 +68,14 @@ public class Day04 : IDay
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
List<GuardEvent> guardEvents = GuardEvent.FromStringArray(inputs);
|
||||
Dictionary<int, GuardSleepHistogram> dictFullHistogram = BuildFullHistorgram(guardEvents);
|
||||
Dictionary<int, GuardSleepHistogram> dictFullHistogram = BuildFullHistogram(guardEvents);
|
||||
|
||||
// Find sleepier guard
|
||||
GuardSleepHistogram highestSleeperHistogram = null;
|
||||
long highestTotalSleep = long.MinValue;
|
||||
foreach (GuardSleepHistogram guardHistogram in dictFullHistogram.Values)
|
||||
{
|
||||
int totalSleep = guardHistogram.SleepOnMunute.Sum();
|
||||
int totalSleep = guardHistogram.SleepOnMinute.Sum();
|
||||
|
||||
if (totalSleep > highestTotalSleep)
|
||||
{
|
||||
@@ -89,10 +89,10 @@ public class Day04 : IDay
|
||||
int maxSleepMinuteValue = int.MinValue;
|
||||
for (int i = 0; i < GuardSleepHistogram.MinutesOnHour; i++)
|
||||
{
|
||||
if (highestSleeperHistogram.SleepOnMunute[i] > maxSleepMinuteValue)
|
||||
if (highestSleeperHistogram.SleepOnMinute[i] > maxSleepMinuteValue)
|
||||
{
|
||||
maxSleepMinute = i;
|
||||
maxSleepMinuteValue = highestSleeperHistogram.SleepOnMunute[i];
|
||||
maxSleepMinuteValue = highestSleeperHistogram.SleepOnMinute[i];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ public class Day04 : IDay
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
List<GuardEvent> guardEvents = GuardEvent.FromStringArray(inputs);
|
||||
Dictionary<int, GuardSleepHistogram> dictFullHistogram = BuildFullHistorgram(guardEvents);
|
||||
Dictionary<int, GuardSleepHistogram> dictFullHistogram = BuildFullHistogram(guardEvents);
|
||||
|
||||
int selectedGuardID = int.MinValue;
|
||||
int selectedMinute = int.MinValue;
|
||||
@@ -112,9 +112,9 @@ public class Day04 : IDay
|
||||
{
|
||||
foreach (GuardSleepHistogram guardHistogram in dictFullHistogram.Values)
|
||||
{
|
||||
if (guardHistogram.SleepOnMunute[i] > maxSleepMinuteValue)
|
||||
if (guardHistogram.SleepOnMinute[i] > maxSleepMinuteValue)
|
||||
{
|
||||
maxSleepMinuteValue = guardHistogram.SleepOnMunute[i];
|
||||
maxSleepMinuteValue = guardHistogram.SleepOnMinute[i];
|
||||
selectedGuardID = guardHistogram.ID;
|
||||
selectedMinute = i;
|
||||
}
|
||||
@@ -125,7 +125,7 @@ public class Day04 : IDay
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
private static Dictionary<int, GuardSleepHistogram> BuildFullHistorgram(List<GuardEvent> guardEvents)
|
||||
private static Dictionary<int, GuardSleepHistogram> BuildFullHistogram(List<GuardEvent> guardEvents)
|
||||
{
|
||||
Dictionary<int, GuardSleepHistogram> dictFullHistogram = new();
|
||||
foreach (IGrouping<int, GuardEvent> group in guardEvents.GroupBy(guardEvent => guardEvent.Date.DayOfYear))
|
||||
@@ -156,10 +156,8 @@ public class Day04 : IDay
|
||||
|
||||
foreach (GuardSleepHistogram dayGuardHistogram in dictDayHistogram.Values)
|
||||
{
|
||||
GuardSleepHistogram guardHistogram;
|
||||
if (dictFullHistogram.ContainsKey(dayGuardHistogram.ID))
|
||||
if (dictFullHistogram.TryGetValue(dayGuardHistogram.ID, out GuardSleepHistogram guardHistogram))
|
||||
{
|
||||
guardHistogram = dictFullHistogram[dayGuardHistogram.ID];
|
||||
guardHistogram.AddHistogram(dayGuardHistogram);
|
||||
}
|
||||
else
|
||||
@@ -181,14 +179,14 @@ public class Day04 : IDay
|
||||
|
||||
public class GuardEvent
|
||||
{
|
||||
public DateTime Date { get; set; }
|
||||
public int? ID { get; set; }
|
||||
public GuardEventType Type { get; set; }
|
||||
public DateTime Date { get; private set; }
|
||||
public int? ID { get; private set; }
|
||||
public GuardEventType Type { get; private set; }
|
||||
|
||||
public static GuardEvent FromString(string strEvent)
|
||||
{
|
||||
GuardEvent guardEvent = new();
|
||||
string[] parts = strEvent.Split(new[] { "[", "-", " ", ":", "]", "#", }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] parts = strEvent.Split(["[", "-", " ", ":", "]", "#"], StringSplitOptions.RemoveEmptyEntries);
|
||||
guardEvent.Date = new DateTime(
|
||||
Convert.ToInt32(parts[0]),
|
||||
Convert.ToInt32(parts[1]),
|
||||
@@ -216,7 +214,7 @@ public class Day04 : IDay
|
||||
public static List<GuardEvent> FromStringArray(string[] strEvents)
|
||||
{
|
||||
List<GuardEvent> guardEvents = strEvents
|
||||
.Select(strEvent => FromString(strEvent))
|
||||
.Select(FromString)
|
||||
.OrderBy(guardEvent => guardEvent.Date)
|
||||
.ToList();
|
||||
|
||||
@@ -240,14 +238,14 @@ public class Day04 : IDay
|
||||
public class GuardSleepHistogram
|
||||
{
|
||||
public const int MinutesOnHour = 60;
|
||||
public int ID { get; set; }
|
||||
public int[] SleepOnMunute { get; } = new int[MinutesOnHour];
|
||||
public int ID { get; init; }
|
||||
public int[] SleepOnMinute { get; } = new int[MinutesOnHour];
|
||||
|
||||
public void FallSleep(int minute)
|
||||
{
|
||||
for (int i = minute; i < MinutesOnHour; i++)
|
||||
{
|
||||
SleepOnMunute[i] = 1;
|
||||
SleepOnMinute[i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +253,7 @@ public class Day04 : IDay
|
||||
{
|
||||
for (int i = minute; i < MinutesOnHour; i++)
|
||||
{
|
||||
SleepOnMunute[i] = 0;
|
||||
SleepOnMinute[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +261,7 @@ public class Day04 : IDay
|
||||
{
|
||||
for (int i = 0; i < MinutesOnHour; i++)
|
||||
{
|
||||
SleepOnMunute[i] += histogram.SleepOnMunute[i];
|
||||
SleepOnMinute[i] += histogram.SleepOnMinute[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public class Day05 : IDay
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
string input = inputs[0];
|
||||
List<char> allUnitTypes = input.Select(c => char.ToLower(c)).Distinct().ToList();
|
||||
List<char> allUnitTypes = input.Select(char.ToLower).Distinct().ToList();
|
||||
|
||||
int minPolymerLenght = int.MaxValue;
|
||||
foreach (char unitType in allUnitTypes)
|
||||
|
||||
@@ -96,7 +96,7 @@ public class Day06 : IDay
|
||||
{
|
||||
return inputs
|
||||
.Where(input => string.IsNullOrEmpty(input) == false)
|
||||
.Select(input => ChronoPoint.FromString(input))
|
||||
.Select(ChronoPoint.FromString)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
@@ -183,12 +183,12 @@ public class Day06 : IDay
|
||||
return areaInRange;
|
||||
}
|
||||
|
||||
public int DistanceThresold { get; set; } = 10000;
|
||||
public int DistanceThreshold { get; init; } = 10000;
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
List<ChronoPoint> points = InputsToPoints(inputs);
|
||||
int areaInRange = AreaInThresold(points, DistanceThresold);
|
||||
int areaInRange = AreaInThresold(points, DistanceThreshold);
|
||||
return areaInRange.ToString();
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ public class Day06 : IDay
|
||||
public static ChronoPoint FromString(string strPoint)
|
||||
{
|
||||
if (string.IsNullOrEmpty(strPoint)) { return null; }
|
||||
string[] parts = strPoint.Split(new[] { ", ", }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] parts = strPoint.Split([", "], StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length < 2) { return null; }
|
||||
ChronoPoint point = new() {
|
||||
X = Convert.ToInt32(parts[0]),
|
||||
|
||||
@@ -89,11 +89,11 @@ public class Day07 : IDay
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) { continue; }
|
||||
string[] parts = input.Split(new[] {
|
||||
string[] parts = input.Split([
|
||||
"Step ",
|
||||
" must be finished before step ",
|
||||
" can begin.",
|
||||
}, StringSplitOptions.RemoveEmptyEntries);
|
||||
], StringSplitOptions.RemoveEmptyEntries);
|
||||
instructions.AddNodeRelation(parts[1].ToUpper(), parts[0].ToUpper());
|
||||
}
|
||||
foreach (InstructionNode node in instructions.Nodes.Values)
|
||||
@@ -118,8 +118,8 @@ public class Day07 : IDay
|
||||
return sbInstructions.ToString();
|
||||
}
|
||||
|
||||
public int BaseCost { get; set; } = 60;
|
||||
public int NumberOfWorkers { get; set; } = 5;
|
||||
public int BaseCost { get; init; } = 60;
|
||||
public int NumberOfWorkers { get; init; } = 5;
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
@@ -130,9 +130,9 @@ public class Day07 : IDay
|
||||
|
||||
public class InstructionNode
|
||||
{
|
||||
public string NodeID { get; set; }
|
||||
public string NodeID { get; init; }
|
||||
|
||||
public List<string> PreviousNodeIDs { get; } = new();
|
||||
public List<string> PreviousNodeIDs { get; } = [];
|
||||
|
||||
public int Cost { get; set; }
|
||||
|
||||
@@ -148,16 +148,16 @@ public class Day07 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
public class Instructions
|
||||
private class Instructions
|
||||
{
|
||||
public Dictionary<string, InstructionNode> Nodes { get; } = new();
|
||||
|
||||
public InstructionNode GetNode(string nodeID)
|
||||
private InstructionNode GetNode(string nodeID)
|
||||
{
|
||||
InstructionNode node = null;
|
||||
if (Nodes.ContainsKey(nodeID))
|
||||
InstructionNode node;
|
||||
if (Nodes.TryGetValue(nodeID, out InstructionNode nodeAux))
|
||||
{
|
||||
node = Nodes[nodeID];
|
||||
node = nodeAux;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -176,7 +176,7 @@ public class Day07 : IDay
|
||||
|
||||
public List<InstructionNode> SortInstructions()
|
||||
{
|
||||
List<InstructionNode> finalNodes = new();
|
||||
List<InstructionNode> finalNodes = [];
|
||||
|
||||
foreach (InstructionNode node in Nodes.Values)
|
||||
{
|
||||
@@ -204,8 +204,8 @@ public class Day07 : IDay
|
||||
|
||||
private class SimulatedWorker
|
||||
{
|
||||
public InstructionNode CurrentInstruction { get; set; }
|
||||
public int ElapsedTime { get; set; }
|
||||
public InstructionNode CurrentInstruction { get; private set; }
|
||||
private int ElapsedTime { get; set; }
|
||||
|
||||
public void SetInstruction(InstructionNode instruction)
|
||||
{
|
||||
@@ -242,7 +242,6 @@ public class Day07 : IDay
|
||||
workers.Add(new SimulatedWorker());
|
||||
}
|
||||
|
||||
bool anyWorkerWitoutWork;
|
||||
do
|
||||
{
|
||||
bool anyWorkDone = false;
|
||||
@@ -255,8 +254,8 @@ public class Day07 : IDay
|
||||
}
|
||||
if (anyWorkDone) { totalElapsedTime++; }
|
||||
|
||||
anyWorkerWitoutWork = workers.Any(w => w.CurrentInstruction == null);
|
||||
if (anyWorkerWitoutWork)
|
||||
bool anyWorkerWithoutWork = workers.Any(w => w.CurrentInstruction == null);
|
||||
if (anyWorkerWithoutWork)
|
||||
{
|
||||
List<InstructionNode> unusedNodes = Nodes.Values
|
||||
.Where(n =>
|
||||
|
||||
@@ -77,13 +77,13 @@ public class Day08 : IDay
|
||||
|
||||
public class IntStream
|
||||
{
|
||||
private int[] _values;
|
||||
private readonly int[] _values;
|
||||
private int _index;
|
||||
|
||||
public IntStream(string strValues)
|
||||
{
|
||||
_values = strValues
|
||||
.Split(new[] { " ", }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Split([" "], StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(strVal => Convert.ToInt32(strVal))
|
||||
.ToArray();
|
||||
_index = 0;
|
||||
@@ -99,9 +99,9 @@ public class Day08 : IDay
|
||||
|
||||
public class ChronoLicenceNode
|
||||
{
|
||||
public List<ChronoLicenceNode> Childs { get; } = new();
|
||||
public List<ChronoLicenceNode> Childs { get; } = [];
|
||||
|
||||
public List<int> Metadata { get; } = new();
|
||||
public List<int> Metadata { get; } = [];
|
||||
|
||||
public static ChronoLicenceNode BuildFromIntStream(IntStream stream)
|
||||
{
|
||||
|
||||
@@ -75,7 +75,7 @@ public class Day09 : IDay
|
||||
|
||||
private static string CalculateHighScore(string input, long factor)
|
||||
{
|
||||
string[] parts = input.Split(new[] { " players; last marble is worth ", " points" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] parts = input.Split([" players; last marble is worth ", " points"], StringSplitOptions.RemoveEmptyEntries);
|
||||
long numberOfPlayers = Convert.ToInt32(parts[0]);
|
||||
long lastMarble = Convert.ToInt32(parts[1]) * factor;
|
||||
MarbleGame marbleGame = new();
|
||||
@@ -86,14 +86,14 @@ public class Day09 : IDay
|
||||
|
||||
public class Marble
|
||||
{
|
||||
public long Value { get; set; }
|
||||
public long Value { get; init; }
|
||||
public Marble Previous { get; set; }
|
||||
public Marble Next { get; set; }
|
||||
}
|
||||
|
||||
public class MarbleGame
|
||||
{
|
||||
public Dictionary<long, long> Scores { get; } = new();
|
||||
private Dictionary<long, long> Scores { get; } = new();
|
||||
|
||||
private Marble _firstMarble;
|
||||
private Marble _currentMarble;
|
||||
@@ -141,20 +141,15 @@ public class Day09 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintStatus()
|
||||
private void PrintStatus()
|
||||
{
|
||||
Console.Write("[{0}] ", _currentPlayer);
|
||||
Marble marble = _firstMarble;
|
||||
do
|
||||
{
|
||||
if (_currentMarble.Value == marble.Value)
|
||||
{
|
||||
Console.Write("({0}) ", marble.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Write("{0} ", marble.Value);
|
||||
}
|
||||
Console.Write(_currentMarble.Value == marble.Value
|
||||
? "({0}) "
|
||||
: "{0} ", marble.Value);
|
||||
marble = marble.Next;
|
||||
} while (marble.Value != 0);
|
||||
Console.WriteLine();
|
||||
|
||||
@@ -156,13 +156,13 @@ Impressed by your sub-hour communication capabilities, the Elves are curious: ex
|
||||
|
||||
public class Day10 : IDay
|
||||
{
|
||||
public int Width { get; set; } = 65;
|
||||
public int Height { get; set; } = 12;
|
||||
public int Width { get; init; } = 65;
|
||||
public int Height { get; init; } = 12;
|
||||
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
LightField lightField = new(inputs);
|
||||
int t = lightField.SearchSmallerBoundindBox();
|
||||
int t = lightField.SearchSmallerBoundingBox();
|
||||
string result = lightField.Render(t, Width, Height);
|
||||
return result;
|
||||
}
|
||||
@@ -170,20 +170,20 @@ public class Day10 : IDay
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
LightField lightField = new(inputs);
|
||||
int t = lightField.SearchSmallerBoundindBox();
|
||||
int t = lightField.SearchSmallerBoundingBox();
|
||||
return t.ToString();
|
||||
}
|
||||
|
||||
public class LightPoint
|
||||
{
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
public int VX { get; set; }
|
||||
public int VY { get; set; }
|
||||
private int X { get; init; }
|
||||
private int Y { get; init; }
|
||||
private int VX { get; init; }
|
||||
private int VY { get; init; }
|
||||
|
||||
public static LightPoint FromString(string strPoint)
|
||||
{
|
||||
string[] parts = strPoint.Split(new[] { "position=<", " ", ",", "> velocity=<", ">" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] parts = strPoint.Split(["position=<", " ", ",", "> velocity=<", ">"], StringSplitOptions.RemoveEmptyEntries);
|
||||
LightPoint point = new() {
|
||||
X = Convert.ToInt32(parts[0]),
|
||||
Y = Convert.ToInt32(parts[1]),
|
||||
@@ -204,16 +204,11 @@ public class Day10 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
public class LightField
|
||||
private class LightField(string[] strPoints)
|
||||
{
|
||||
private readonly List<LightPoint> _points;
|
||||
private readonly List<LightPoint> _points = strPoints.Select(LightPoint.FromString).ToList();
|
||||
|
||||
public LightField(string[] strPoints)
|
||||
{
|
||||
_points = strPoints.Select(strPoint => LightPoint.FromString(strPoint)).ToList();
|
||||
}
|
||||
|
||||
public int SearchSmallerBoundindBox()
|
||||
public int SearchSmallerBoundingBox()
|
||||
{
|
||||
int minHeight = int.MaxValue;
|
||||
int minT = 0;
|
||||
@@ -288,14 +283,7 @@ public class Day10 : IDay
|
||||
sb.AppendLine();
|
||||
for (int i = 0; i < width; i++)
|
||||
{
|
||||
if (field[i, j] > 0)
|
||||
{
|
||||
sb.Append("#");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(".");
|
||||
}
|
||||
sb.Append(field[i, j] > 0 ? "#" : ".");
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
|
||||
@@ -190,7 +190,7 @@ public class Day11 : IDay
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
public static void SearchBestRegion(int width, int height, int serial, out int x, out int y, out int size)
|
||||
private static void SearchBestRegion(int width, int height, int serial, out int x, out int y, out int size)
|
||||
{
|
||||
int[,] summationFiled = GenerateSumationField(width, height, serial);
|
||||
int bestPowerLevel = int.MinValue;
|
||||
|
||||
@@ -96,20 +96,20 @@ public class Day12 : IDay
|
||||
|
||||
private class PlantRule
|
||||
{
|
||||
public bool Minus2 { get; set; }
|
||||
public bool Minus1 { get; set; }
|
||||
public bool Current { get; set; }
|
||||
public bool Plus1 { get; set; }
|
||||
public bool Plus2 { get; set; }
|
||||
public bool Minus2 { get; init; }
|
||||
public bool Minus1 { get; init; }
|
||||
public bool Current { get; init; }
|
||||
public bool Plus1 { get; init; }
|
||||
public bool Plus2 { get; init; }
|
||||
|
||||
public bool Result { get; set; }
|
||||
public bool Result { get; init; }
|
||||
}
|
||||
|
||||
private const int SideMargin = 5;
|
||||
private const int SideProcessMargin = 2;
|
||||
|
||||
private List<bool> _initialState = new();
|
||||
private List<PlantRule> _rules = new();
|
||||
private readonly List<bool> _initialState = [];
|
||||
private readonly List<PlantRule> _rules = [];
|
||||
private long _offsetField;
|
||||
private bool[] _field;
|
||||
private bool[] _workField;
|
||||
@@ -126,9 +126,8 @@ public class Day12 : IDay
|
||||
for (int i = 2; i < inputs.Length; i++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(inputs[i])) { continue; }
|
||||
string[] parts = inputs[i].Split(new[] { " => " }, StringSplitOptions.RemoveEmptyEntries);
|
||||
_rules.Add(new PlantRule
|
||||
{
|
||||
string[] parts = inputs[i].Split([" => "], StringSplitOptions.RemoveEmptyEntries);
|
||||
_rules.Add(new PlantRule {
|
||||
Minus2 = (parts[0][0] == '#'),
|
||||
Minus1 = (parts[0][1] == '#'),
|
||||
Current = (parts[0][2] == '#'),
|
||||
@@ -151,9 +150,7 @@ public class Day12 : IDay
|
||||
|
||||
private void SwapFields()
|
||||
{
|
||||
bool[] aux = _field;
|
||||
_field = _workField;
|
||||
_workField = aux;
|
||||
(_field, _workField) = (_workField, _field);
|
||||
}
|
||||
|
||||
private void RecenterField()
|
||||
@@ -236,8 +233,7 @@ public class Day12 : IDay
|
||||
rule.Minus1 == minus1 &&
|
||||
rule.Current == current &&
|
||||
rule.Plus1 == plus1 &&
|
||||
rule.Plus2 == plus2 &&
|
||||
true
|
||||
rule.Plus2 == plus2
|
||||
)
|
||||
{
|
||||
result = rule.Result;
|
||||
|
||||
@@ -372,7 +372,7 @@ public class Day13 : IDay
|
||||
private int _width;
|
||||
private int _height;
|
||||
private char[,] _grid;
|
||||
private List<Train> _trains = new();
|
||||
private readonly List<Train> _trains = [];
|
||||
|
||||
private void Initialize(string[] inputs)
|
||||
{
|
||||
@@ -387,8 +387,7 @@ public class Day13 : IDay
|
||||
char cell = inputs[j][i];
|
||||
if (cell == '^')
|
||||
{
|
||||
_trains.Add(new Train
|
||||
{
|
||||
_trains.Add(new Train {
|
||||
X = i,
|
||||
Y = j,
|
||||
Direction = TrainDirection.North,
|
||||
@@ -398,8 +397,7 @@ public class Day13 : IDay
|
||||
}
|
||||
if (cell == 'v')
|
||||
{
|
||||
_trains.Add(new Train
|
||||
{
|
||||
_trains.Add(new Train {
|
||||
X = i,
|
||||
Y = j,
|
||||
Direction = TrainDirection.South,
|
||||
@@ -409,8 +407,7 @@ public class Day13 : IDay
|
||||
}
|
||||
if (cell == '<')
|
||||
{
|
||||
_trains.Add(new Train
|
||||
{
|
||||
_trains.Add(new Train {
|
||||
X = i,
|
||||
Y = j,
|
||||
Direction = TrainDirection.West,
|
||||
@@ -420,8 +417,7 @@ public class Day13 : IDay
|
||||
}
|
||||
if (cell == '>')
|
||||
{
|
||||
_trains.Add(new Train
|
||||
{
|
||||
_trains.Add(new Train {
|
||||
X = i,
|
||||
Y = j,
|
||||
Direction = TrainDirection.East,
|
||||
@@ -502,5 +498,4 @@ public class Day13 : IDay
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -377,18 +377,18 @@ public class Day15 : IDay
|
||||
{
|
||||
public enum EntityType { Elf, Goblin, }
|
||||
|
||||
public bool Show { get; set; } = false;
|
||||
private bool Show { get; set; } = false;
|
||||
|
||||
public class Entity
|
||||
{
|
||||
public const int GoblinAttackPower = 3;
|
||||
private const int GoblinAttackPower = 3;
|
||||
public static int ElfAttackPower { get; set; } = 3;
|
||||
public const int InitialHealth = 200;
|
||||
private const int InitialHealth = 200;
|
||||
|
||||
public EntityType Type { get; set; }
|
||||
public EntityType Type { get; init; }
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
public int Health { get; set; } = InitialHealth;
|
||||
public int Health { get; private set; } = InitialHealth;
|
||||
|
||||
public bool IsAlive()
|
||||
{
|
||||
@@ -401,18 +401,17 @@ public class Day15 : IDay
|
||||
(other.X + 1 == X && other.Y == Y) ||
|
||||
(other.X - 1 == X && other.Y == Y) ||
|
||||
(other.X == X && other.Y + 1 == Y) ||
|
||||
(other.X == X && other.Y - 1 == Y) ||
|
||||
false
|
||||
(other.X == X && other.Y - 1 == Y)
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void Attack(char[,] map, Entity other)
|
||||
{
|
||||
if(Type == EntityType.Elf)
|
||||
if (Type == EntityType.Elf)
|
||||
{
|
||||
other.Health -= ElfAttackPower;
|
||||
}
|
||||
@@ -435,13 +434,12 @@ public class Day15 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
public class Target
|
||||
private class Target
|
||||
{
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
public int X { get; init; }
|
||||
public int Y { get; init; }
|
||||
public int Distance { get; set; }
|
||||
public int Priority { get; set; }
|
||||
public Entity Entity { get; set; }
|
||||
public int Priority { get; init; }
|
||||
}
|
||||
|
||||
private int _width;
|
||||
@@ -450,7 +448,7 @@ public class Day15 : IDay
|
||||
private List<Entity> _entities;
|
||||
private BreadthFirstSearchGrid _search;
|
||||
private int _rounds;
|
||||
|
||||
|
||||
private void Init(string[] inputs)
|
||||
{
|
||||
_height = inputs.Length;
|
||||
@@ -473,8 +471,7 @@ public class Day15 : IDay
|
||||
}
|
||||
else if (cell == 'E')
|
||||
{
|
||||
_entities.Add(new Entity
|
||||
{
|
||||
_entities.Add(new Entity {
|
||||
Type = EntityType.Elf,
|
||||
X = i,
|
||||
Y = j,
|
||||
@@ -483,8 +480,7 @@ public class Day15 : IDay
|
||||
}
|
||||
else if (cell == 'G')
|
||||
{
|
||||
_entities.Add(new Entity
|
||||
{
|
||||
_entities.Add(new Entity {
|
||||
Type = EntityType.Goblin,
|
||||
X = i,
|
||||
Y = j,
|
||||
@@ -505,7 +501,7 @@ public class Day15 : IDay
|
||||
.ThenBy(e => e.X);
|
||||
}
|
||||
|
||||
public IEnumerable<Entity> GetTargetEntities(Entity entity)
|
||||
private IEnumerable<Entity> GetTargetEntities(Entity entity)
|
||||
{
|
||||
return _entities
|
||||
.Where(e => e.IsAlive() && e.Type != entity.Type)
|
||||
@@ -513,30 +509,28 @@ public class Day15 : IDay
|
||||
.ThenBy(e => e.X);
|
||||
}
|
||||
|
||||
public Entity GetBestInRangeTarget(Entity entity, IEnumerable<Entity> targets)
|
||||
private Entity GetBestInRangeTarget(Entity entity, IEnumerable<Entity> targets)
|
||||
{
|
||||
return targets
|
||||
.Where(e => entity.InRangeOf(e))
|
||||
.Where(entity.InRangeOf)
|
||||
.OrderBy(e => e.Health)
|
||||
.ThenBy(e => e.Y)
|
||||
.ThenBy(e => e.X)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
private void AddTarget(List<Target> targets, int targetX, int targetY, int priority, Entity entity)
|
||||
private void AddTarget(List<Target> targets, int targetX, int targetY, int priority)
|
||||
{
|
||||
if (targetX >= 0 && targetX < _width && targetY >= 0 && targetY < _height && _map[targetX, targetY] == '.')
|
||||
{
|
||||
int distance = _search.QueryDistance(targetX, targetY);
|
||||
if (distance >= 0)
|
||||
{
|
||||
targets.Add(new Target
|
||||
{
|
||||
targets.Add(new Target {
|
||||
X = targetX,
|
||||
Y = targetY,
|
||||
Distance = distance,
|
||||
Priority = priority,
|
||||
Entity = entity,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -552,7 +546,7 @@ public class Day15 : IDay
|
||||
foreach (Entity entity in entities)
|
||||
{
|
||||
if (entity.IsAlive() == false) { continue; }
|
||||
IEnumerable<Entity> entitiesTargets = GetTargetEntities(entity);
|
||||
IEnumerable<Entity> entitiesTargets = GetTargetEntities(entity).ToList();
|
||||
if (entitiesTargets.Any() == false)
|
||||
{
|
||||
running = false;
|
||||
@@ -573,19 +567,18 @@ public class Day15 : IDay
|
||||
int priority = 0;
|
||||
foreach (Entity entityTarget in entitiesTargets)
|
||||
{
|
||||
AddTarget(targets, entityTarget.X, entityTarget.Y - 1, priority++, entityTarget);
|
||||
AddTarget(targets, entityTarget.X - 1, entityTarget.Y, priority++, entityTarget);
|
||||
AddTarget(targets, entityTarget.X + 1, entityTarget.Y, priority++, entityTarget);
|
||||
AddTarget(targets, entityTarget.X, entityTarget.Y + 1, priority++, entityTarget);
|
||||
AddTarget(targets, entityTarget.X, entityTarget.Y - 1, priority++);
|
||||
AddTarget(targets, entityTarget.X - 1, entityTarget.Y, priority++);
|
||||
AddTarget(targets, entityTarget.X + 1, entityTarget.Y, priority++);
|
||||
AddTarget(targets, entityTarget.X, entityTarget.Y + 1, priority++);
|
||||
}
|
||||
Target bestTarget = targets.OrderBy(t => t.Distance).ThenBy(t => t.Priority).FirstOrDefault();
|
||||
if (bestTarget != null)
|
||||
{
|
||||
_search.SearchCharGrid(_map, '.', bestTarget.X, bestTarget.Y);
|
||||
targets.Clear();
|
||||
Target dirTarget;
|
||||
|
||||
dirTarget = new Target { X = entity.X, Y = entity.Y - 1, Priority = 0, };
|
||||
Target dirTarget = new() { X = entity.X, Y = entity.Y - 1, Priority = 0, };
|
||||
dirTarget.Distance = _search.QueryDistance(dirTarget.X, dirTarget.Y);
|
||||
if (dirTarget.Distance >= 0) targets.Add(dirTarget);
|
||||
|
||||
@@ -609,7 +602,7 @@ public class Day15 : IDay
|
||||
{
|
||||
throw new Exception("No possible direction");
|
||||
}
|
||||
|
||||
|
||||
entity.MoveTo(_map, finalTarget.X, finalTarget.Y);
|
||||
|
||||
// Attack
|
||||
@@ -620,10 +613,10 @@ public class Day15 : IDay
|
||||
}
|
||||
}
|
||||
}
|
||||
if(running == false) { break; }
|
||||
if (running == false) { break; }
|
||||
_rounds++;
|
||||
if (Show) { PrintBattlefield(); }
|
||||
} while (running);
|
||||
} while (true);
|
||||
if (Show) { PrintBattlefield(); }
|
||||
}
|
||||
|
||||
@@ -637,7 +630,8 @@ public class Day15 : IDay
|
||||
{
|
||||
Console.Write(_map[i, j]);
|
||||
}
|
||||
IEnumerable<Entity> entitiesOnLine = _entities.Where(e => e.IsAlive() && e.Y == j).OrderBy(e => e.X);
|
||||
int j1 = j;
|
||||
IEnumerable<Entity> entitiesOnLine = _entities.Where(e => e.IsAlive() && e.Y == j1).OrderBy(e => e.X);
|
||||
foreach (Entity entity in entitiesOnLine)
|
||||
{
|
||||
Console.Write(" {0}({1})", (entity.Type == EntityType.Elf) ? 'E' : 'G', entity.Health);
|
||||
@@ -683,16 +677,15 @@ public class Day15 : IDay
|
||||
private class BFSCell
|
||||
{
|
||||
public bool Visited { get; set; }
|
||||
public BFSCell CameFrom { get; set; }
|
||||
public int Distance { get; set; } = -1;
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
public int X { get; init; }
|
||||
public int Y { get; init; }
|
||||
}
|
||||
|
||||
private readonly BFSCell[,] _grid;
|
||||
private readonly int _width;
|
||||
private readonly int _height;
|
||||
|
||||
|
||||
public BreadthFirstSearchGrid(int width, int height)
|
||||
{
|
||||
_grid = new BFSCell[width, height];
|
||||
@@ -707,15 +700,14 @@ public class Day15 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
private void Reset()
|
||||
{
|
||||
for(int j =0;j< _height; j++)
|
||||
for (int j = 0; j < _height; j++)
|
||||
{
|
||||
for(int i = 0; i < _width; i++)
|
||||
for (int i = 0; i < _width; i++)
|
||||
{
|
||||
BFSCell cell = _grid[i, j];
|
||||
cell.Visited = false;
|
||||
cell.CameFrom = null;
|
||||
cell.Distance = -1;
|
||||
}
|
||||
}
|
||||
@@ -724,7 +716,7 @@ public class Day15 : IDay
|
||||
private void ProcessCell(char[,] grid, char empty, Queue<BFSCell> frontier, BFSCell current, int nextX, int nextY)
|
||||
{
|
||||
if (nextX < 0 || nextX >= _width || nextY < 0 || nextY >= _height) { return; }
|
||||
if (grid[nextX, nextY] == empty || current== null)
|
||||
if (grid[nextX, nextY] == empty || current == null)
|
||||
{
|
||||
BFSCell cell = _grid[nextX, nextY];
|
||||
if (cell.Visited == false)
|
||||
@@ -732,7 +724,6 @@ public class Day15 : IDay
|
||||
frontier.Enqueue(cell);
|
||||
cell.Visited = true;
|
||||
cell.Distance = (current?.Distance ?? -1) + 1;
|
||||
cell.CameFrom = current;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,17 +160,11 @@ public class Day16 : IDay
|
||||
|
||||
private readonly List<ChronoInstruction> _instructions;
|
||||
|
||||
private class ChronoInstruction
|
||||
private class ChronoInstruction(string opName, Action<int, int, int> opFunc)
|
||||
{
|
||||
public int OpCode { get; set; } = -1;
|
||||
public string OpName { get; }
|
||||
public Action<int, int, int> OpFunc { get; }
|
||||
|
||||
public ChronoInstruction(string opName, Action<int, int, int> opFunc)
|
||||
{
|
||||
OpName = opName;
|
||||
OpFunc = opFunc;
|
||||
}
|
||||
public string OpName { get; } = opName;
|
||||
public Action<int, int, int> OpFunc { get; } = opFunc;
|
||||
|
||||
public Dictionary<int, int> OpCodeHistogram { get; } = new();
|
||||
|
||||
@@ -191,7 +185,7 @@ public class Day16 : IDay
|
||||
public ChronoMachine()
|
||||
{
|
||||
_registers = new int[4];
|
||||
_instructions = new List<ChronoInstruction> {
|
||||
_instructions = [
|
||||
new("addr", Op_AddR),
|
||||
new("addi", Op_AddI),
|
||||
new("mulr", Op_MulR),
|
||||
@@ -208,7 +202,7 @@ public class Day16 : IDay
|
||||
new("eqir", Op_EqIR),
|
||||
new("eqri", Op_EqRI),
|
||||
new("eqrr", Op_EqRR),
|
||||
};
|
||||
];
|
||||
}
|
||||
|
||||
public void ResetRegisters()
|
||||
@@ -341,7 +335,7 @@ public class Day16 : IDay
|
||||
|
||||
public void InitOpCodes(bool debug = false)
|
||||
{
|
||||
if(debug)
|
||||
if (debug)
|
||||
{
|
||||
foreach (ChronoInstruction instruction in _instructions)
|
||||
{
|
||||
@@ -374,7 +368,7 @@ public class Day16 : IDay
|
||||
|
||||
instruction.OpCode = opCode;
|
||||
_dictInstructions.Add(opCode, instruction);
|
||||
if(debug) { Console.WriteLine($"{instruction.OpName}: {instruction.OpCode}"); }
|
||||
if (debug) { Console.WriteLine($"{instruction.OpName}: {instruction.OpCode}"); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ public class Day23 : IDay
|
||||
{
|
||||
List<NanoBot> nanoBots = NanoBot.ListFromStrings(inputs);
|
||||
NanoBot bestNanoBot = nanoBots.OrderBy(nanoBot => nanoBot.Range).LastOrDefault();
|
||||
int countInRange = nanoBots.Where(nanoBot => bestNanoBot.InRange(nanoBot)).Count();
|
||||
int countInRange = nanoBots.Count(nanoBot => bestNanoBot.InRange(nanoBot));
|
||||
return countInRange.ToString();
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public class Day23 : IDay
|
||||
long minX = long.MaxValue;
|
||||
long minY = long.MaxValue;
|
||||
long minZ = long.MaxValue;
|
||||
foreach(NanoBot nanoBot in nanoBots)
|
||||
foreach (NanoBot nanoBot in nanoBots)
|
||||
{
|
||||
if (nanoBot.X < minX) { minX = nanoBot.X; }
|
||||
if (nanoBot.X > maxX) { maxX = nanoBot.X; }
|
||||
@@ -95,7 +95,7 @@ public class Day23 : IDay
|
||||
long sizeY = maxY - minY;
|
||||
long sizeZ = maxZ - minZ;
|
||||
long scale = Math.Min(sizeX, Math.Min(sizeY, sizeZ));
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
scale /= 2;
|
||||
@@ -112,11 +112,11 @@ public class Day23 : IDay
|
||||
for (long i = minX; i <= maxX; i += scale)
|
||||
{
|
||||
int count = 0;
|
||||
foreach(NanoBot nanoBot in nanoBots)
|
||||
foreach (NanoBot nanoBot in nanoBots)
|
||||
{
|
||||
if (nanoBot.InRange(i, j, k, scale)) { count++; }
|
||||
}
|
||||
if(count> bestCount)
|
||||
if (count > bestCount)
|
||||
{
|
||||
bestX = i;
|
||||
bestY = j;
|
||||
@@ -134,7 +134,7 @@ public class Day23 : IDay
|
||||
minZ = bestZ - scale;
|
||||
maxZ = bestZ + scale;
|
||||
|
||||
if(scale == 1)
|
||||
if (scale == 1)
|
||||
{
|
||||
long distance = bestX + bestY + bestZ;
|
||||
return distance.ToString();
|
||||
@@ -145,14 +145,14 @@ public class Day23 : IDay
|
||||
|
||||
public class NanoBot
|
||||
{
|
||||
public long X { get; set; }
|
||||
public long Y { get; set; }
|
||||
public long Z { get; set; }
|
||||
public long Range { get; set; }
|
||||
public long X { get; private init; }
|
||||
public long Y { get; private init; }
|
||||
public long Z { get; private init; }
|
||||
public long Range { get; private init; }
|
||||
|
||||
public static NanoBot FromString(string strInput)
|
||||
private static NanoBot FromString(string strInput)
|
||||
{
|
||||
string[] parts = strInput.Split(new[] { "pos=<", ",", ">, r=", }, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] parts = strInput.Split(["pos=<", ",", ">, r="], StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length != 4) { return null; }
|
||||
NanoBot nanoBot = new() {
|
||||
X = Convert.ToInt64(parts[0]),
|
||||
@@ -166,18 +166,18 @@ public class Day23 : IDay
|
||||
public static List<NanoBot> ListFromStrings(string[] inputs)
|
||||
{
|
||||
List<NanoBot> nanoBots = inputs
|
||||
.Select(strInput => FromString(strInput))
|
||||
.Select(FromString)
|
||||
.Where(nanoBot => nanoBot != null)
|
||||
.ToList();
|
||||
return nanoBots;
|
||||
}
|
||||
|
||||
public long ManhattanDistance(NanoBot other)
|
||||
private long ManhattanDistance(NanoBot other)
|
||||
{
|
||||
return ManhattanDistance(other.X, other.Y, other.Z);
|
||||
}
|
||||
|
||||
public long ManhattanDistance(long x, long y, long z)
|
||||
private long ManhattanDistance(long x, long y, long z)
|
||||
{
|
||||
long distance = Math.Abs(X - x) + Math.Abs(Y - y) + Math.Abs(Z - z);
|
||||
return distance;
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2020.Tests</RootNamespace>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2020.Tests</RootNamespace>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||
<PackageReference Include="xunit" Version="2.6.3"/>
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2020\AdventOfCode2020.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2020\AdventOfCode2020.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -7,16 +7,16 @@ public class Day01_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01 day = new Day01();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"1721",
|
||||
"979",
|
||||
"366",
|
||||
"299",
|
||||
"675",
|
||||
"1456",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("514579", result);
|
||||
}
|
||||
@@ -28,16 +28,16 @@ public class Day01_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01 day = new Day01();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"1721",
|
||||
"979",
|
||||
"366",
|
||||
"299",
|
||||
"675",
|
||||
"1456",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("241861950", result);
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@ public class Day02_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day02();
|
||||
Day02 day = new Day02();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"1-3 a: abcde",
|
||||
"1-3 b: cdefg",
|
||||
"2-9 c: ccccccccc",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
}
|
||||
@@ -25,13 +25,13 @@ public class Day02_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day02();
|
||||
Day02 day = new Day02();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"1-3 a: abcde",
|
||||
"1-3 b: cdefg",
|
||||
"2-9 c: ccccccccc",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("1", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day03_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day03();
|
||||
Day03 day = new Day03();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"..##.......",
|
||||
"#...#...#..",
|
||||
".#....#..#.",
|
||||
@@ -19,7 +19,7 @@ public class Day03_Tests
|
||||
"#.##...#...",
|
||||
"#...##....#",
|
||||
".#..#...#.#",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("7", result);
|
||||
}
|
||||
@@ -27,9 +27,9 @@ public class Day03_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day03();
|
||||
Day03 day = new Day03();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"..##.......",
|
||||
"#...#...#..",
|
||||
".#....#..#.",
|
||||
@@ -41,7 +41,7 @@ public class Day03_Tests
|
||||
"#.##...#...",
|
||||
"#...##....#",
|
||||
".#..#...#.#",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("336", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day04_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day04();
|
||||
Day04 day = new Day04();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"ecl:gry pid:860033327 eyr:2020 hcl:#fffffd",
|
||||
"byr:1937 iyr:2017 cid:147 hgt:183cm",
|
||||
"",
|
||||
@@ -21,7 +21,7 @@ public class Day04_Tests
|
||||
"",
|
||||
"hcl:#cfa07d eyr:2025 pid:166559648",
|
||||
"iyr:2011 ecl:brn hgt:59in",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
}
|
||||
@@ -29,9 +29,9 @@ public class Day04_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__ExampleInvalid()
|
||||
{
|
||||
var day = new Day04();
|
||||
Day04 day = new Day04();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"eyr:1972 cid:100",
|
||||
"hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926",
|
||||
"",
|
||||
@@ -45,7 +45,7 @@ public class Day04_Tests
|
||||
"hgt:59cm ecl:zzz",
|
||||
"eyr:2038 hcl:74454a iyr:2023",
|
||||
"pid:3556412378 byr:2007",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("0", result);
|
||||
}
|
||||
@@ -53,9 +53,9 @@ public class Day04_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__ExampleValid()
|
||||
{
|
||||
var day = new Day04();
|
||||
Day04 day = new Day04();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980",
|
||||
"hcl:#623a2f",
|
||||
"",
|
||||
@@ -68,7 +68,7 @@ public class Day04_Tests
|
||||
"eyr:2022",
|
||||
"",
|
||||
"iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@ public class Day05_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
{
|
||||
var day = new Day05();
|
||||
Day05 day = new Day05();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"FBFBBFFRLR",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("357", result);
|
||||
}
|
||||
@@ -17,11 +17,11 @@ public class Day05_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example2()
|
||||
{
|
||||
var day = new Day05();
|
||||
Day05 day = new Day05();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"BFFFBBFRRR",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("567", result);
|
||||
}
|
||||
@@ -29,11 +29,11 @@ public class Day05_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example3()
|
||||
{
|
||||
var day = new Day05();
|
||||
Day05 day = new Day05();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"FFFBBBFRRR",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("119", result);
|
||||
}
|
||||
@@ -41,11 +41,11 @@ public class Day05_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example4()
|
||||
{
|
||||
var day = new Day05();
|
||||
Day05 day = new Day05();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"BBFFBBFRLL",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("820", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day06_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day06();
|
||||
Day06 day = new Day06();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"abc",
|
||||
"",
|
||||
"a",
|
||||
@@ -23,7 +23,7 @@ public class Day06_Tests
|
||||
"a",
|
||||
"",
|
||||
"b",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("11", result);
|
||||
}
|
||||
@@ -31,9 +31,9 @@ public class Day06_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day06();
|
||||
Day06 day = new Day06();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"abc",
|
||||
"",
|
||||
"a",
|
||||
@@ -49,7 +49,7 @@ public class Day06_Tests
|
||||
"a",
|
||||
"",
|
||||
"b",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("6", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day07_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day07();
|
||||
Day07 day = new Day07();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"light red bags contain 1 bright white bag, 2 muted yellow bags.",
|
||||
"dark orange bags contain 3 bright white bags, 4 muted yellow bags.",
|
||||
"bright white bags contain 1 shiny gold bag.",
|
||||
@@ -17,7 +17,7 @@ public class Day07_Tests
|
||||
"vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.",
|
||||
"faded blue bags contain no other bags.",
|
||||
"dotted black bags contain no other bags.",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
@@ -25,9 +25,9 @@ public class Day07_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day07();
|
||||
Day07 day = new Day07();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"shiny gold bags contain 2 dark red bags.",
|
||||
"dark red bags contain 2 dark orange bags.",
|
||||
"dark orange bags contain 2 dark yellow bags.",
|
||||
@@ -35,7 +35,7 @@ public class Day07_Tests
|
||||
"dark green bags contain 2 dark blue bags.",
|
||||
"dark blue bags contain 2 dark violet bags.",
|
||||
"dark violet bags contain no other bags.",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("126", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day08_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day08();
|
||||
Day08 day = new Day08();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"nop +0",
|
||||
"acc +1",
|
||||
"jmp +4",
|
||||
@@ -17,7 +17,7 @@ public class Day08_Tests
|
||||
"acc +1",
|
||||
"jmp -4",
|
||||
"acc +6",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("5", result);
|
||||
}
|
||||
@@ -25,9 +25,9 @@ public class Day08_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day08();
|
||||
Day08 day = new Day08();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"nop +0",
|
||||
"acc +1",
|
||||
"jmp +4",
|
||||
@@ -37,7 +37,7 @@ public class Day08_Tests
|
||||
"acc +1",
|
||||
"jmp -4",
|
||||
"acc +6",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("8", result);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ public class Day09_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day09();
|
||||
Day09 day = new Day09();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"35",
|
||||
"20",
|
||||
"15",
|
||||
@@ -28,7 +28,7 @@ public class Day09_Tests
|
||||
"277",
|
||||
"309",
|
||||
"576",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("127", result);
|
||||
}
|
||||
@@ -36,9 +36,9 @@ public class Day09_Tests
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day09();
|
||||
Day09 day = new Day09();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"35",
|
||||
"20",
|
||||
"15",
|
||||
@@ -59,7 +59,7 @@ public class Day09_Tests
|
||||
"277",
|
||||
"309",
|
||||
"576",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("62", result);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2020</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2020</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="inputs\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -112,5 +112,4 @@ public class Day03 : IDay
|
||||
}
|
||||
return treeCnt;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -118,7 +118,7 @@ iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
|
||||
|
||||
Count the number of valid passports - those that have all required fields and valid values. Continue to treat cid as optional. In your batch file, how many passports are valid?
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
public class Day04 : IDay
|
||||
@@ -127,7 +127,7 @@ public class Day04 : IDay
|
||||
{
|
||||
List<Dictionary<string, string>> passports = Passports_Parse(inputs);
|
||||
int cnt = 0;
|
||||
List<string> neededFields = new() {
|
||||
List<string> neededFields = [
|
||||
"byr", // Birth Year
|
||||
"iyr", // Issue Year
|
||||
"eyr", // Expiration Year
|
||||
@@ -135,7 +135,7 @@ public class Day04 : IDay
|
||||
"hcl", // Hair Color
|
||||
"ecl", // Eye Color
|
||||
"pid", // Passport ID
|
||||
};
|
||||
];
|
||||
|
||||
foreach (Dictionary<string, string> passport in passports)
|
||||
{
|
||||
@@ -167,7 +167,7 @@ public class Day04 : IDay
|
||||
|
||||
private List<Dictionary<string, string>> Passports_Parse(string[] inputs)
|
||||
{
|
||||
List<Dictionary<string, string>> passports = new();
|
||||
List<Dictionary<string, string>> passports = [];
|
||||
Dictionary<string, string> passport = new();
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
@@ -257,5 +257,4 @@ public class Day04 : IDay
|
||||
if (input.All(char.IsNumber) == false) { return null; }
|
||||
return Convert.ToInt32(input);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -169,8 +169,8 @@ public class Day05 : IDay
|
||||
private Seat Seat_Parse(string input)
|
||||
{
|
||||
if (input.Length != 10 ||
|
||||
input.All(c => c == 'F' || c == 'B' || c == 'L' || c == 'R') == false ||
|
||||
false)
|
||||
input.All(c => c == 'F' || c == 'B' || c == 'L' || c == 'R') == false
|
||||
)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -67,10 +67,7 @@ public class Day06 : IDay
|
||||
|
||||
foreach (char c in input)
|
||||
{
|
||||
if (groupMap.ContainsKey(c) == false)
|
||||
{
|
||||
groupMap.Add(c, true);
|
||||
}
|
||||
groupMap.TryAdd(c, true);
|
||||
}
|
||||
}
|
||||
if (groupMap.Count > 0)
|
||||
@@ -78,7 +75,7 @@ public class Day06 : IDay
|
||||
groupMaps.Add(groupMap);
|
||||
}
|
||||
|
||||
int total = groupMaps.Sum(groupMap => groupMap.Count);
|
||||
int total = groupMaps.Sum(dict => dict.Count);
|
||||
return total.ToString();
|
||||
|
||||
}
|
||||
@@ -101,13 +98,9 @@ public class Day06 : IDay
|
||||
groupCount++;
|
||||
foreach (char c in input)
|
||||
{
|
||||
if (groupMap.ContainsKey(c) == false)
|
||||
if (groupMap.TryAdd(c, 1) == false)
|
||||
{
|
||||
groupMap.Add(c, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
groupMap[c] = groupMap[c] + 1;
|
||||
groupMap[c] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,15 +72,15 @@ public class Day07 : IDay
|
||||
{
|
||||
string myBagColor = "shiny gold";
|
||||
|
||||
List<BaggageRule> rules = new();
|
||||
List<BaggageRule> rules = [];
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
BaggageRule rule = BaggageRule_Parse(input);
|
||||
rules.Add(rule);
|
||||
}
|
||||
|
||||
List<string> bagColorsToCheck = new() { myBagColor };
|
||||
List<string> bagColorsChecked = new() { myBagColor };
|
||||
List<string> bagColorsToCheck = [myBagColor];
|
||||
List<string> bagColorsChecked = [myBagColor];
|
||||
int cntBagColors = 0;
|
||||
while (bagColorsToCheck.Count > 0)
|
||||
{
|
||||
@@ -108,7 +108,7 @@ public class Day07 : IDay
|
||||
{
|
||||
string myBagColor = "shiny gold";
|
||||
|
||||
List<BaggageRule> rules = new();
|
||||
List<BaggageRule> rules = [];
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
BaggageRule rule = BaggageRule_Parse(input);
|
||||
@@ -116,30 +116,31 @@ public class Day07 : IDay
|
||||
}
|
||||
Dictionary<string, BaggageRule> dictRules = rules.ToDictionary(x => x.BagColor);
|
||||
|
||||
int cnt = BaggageRule_CountChilds(myBagColor, dictRules);
|
||||
int cnt = BaggageRule_CountChildren(myBagColor, dictRules);
|
||||
|
||||
return cnt.ToString();
|
||||
}
|
||||
|
||||
public class BaggageContainRule
|
||||
private class BaggageContainRule
|
||||
{
|
||||
public string BagColor { get; set; }
|
||||
public int Count { get; set; }
|
||||
public int Count { get; init; }
|
||||
}
|
||||
|
||||
public class BaggageRule
|
||||
private class BaggageRule
|
||||
{
|
||||
public string BagColor { get; set; }
|
||||
|
||||
public List<BaggageContainRule> Contain { get; set; }
|
||||
public List<BaggageContainRule> Contain { get; init; }
|
||||
}
|
||||
|
||||
public BaggageRule BaggageRule_Parse(string input)
|
||||
private BaggageRule BaggageRule_Parse(string input)
|
||||
{
|
||||
string[] words = input.Split(' ');
|
||||
string status = "Parse Color 1";
|
||||
BaggageRule rule = new();
|
||||
rule.Contain = new List<BaggageContainRule>();
|
||||
BaggageRule rule = new() {
|
||||
Contain = [],
|
||||
};
|
||||
BaggageContainRule containRule = null;
|
||||
string color1 = string.Empty;
|
||||
|
||||
@@ -164,9 +165,14 @@ public class Day07 : IDay
|
||||
status = "Parse Contain count";
|
||||
break;
|
||||
case "Parse Contain count":
|
||||
if (word == "no") { status = "End"; break; }
|
||||
containRule = new BaggageContainRule();
|
||||
containRule.Count = Convert.ToInt32(word);
|
||||
if (word == "no")
|
||||
{
|
||||
status = "End";
|
||||
break;
|
||||
}
|
||||
containRule = new BaggageContainRule {
|
||||
Count = Convert.ToInt32(word),
|
||||
};
|
||||
status = "Parse Contain color 1";
|
||||
break;
|
||||
case "Parse Contain color 1":
|
||||
@@ -179,7 +185,11 @@ public class Day07 : IDay
|
||||
status = "Parse Contain continue";
|
||||
break;
|
||||
case "Parse Contain continue":
|
||||
if (word == "bag," || word == "bags,") { status = "Parse Contain count"; break; }
|
||||
if (word == "bag," || word == "bags,")
|
||||
{
|
||||
status = "Parse Contain count";
|
||||
break;
|
||||
}
|
||||
status = "End";
|
||||
break;
|
||||
case "End":
|
||||
@@ -189,13 +199,13 @@ public class Day07 : IDay
|
||||
return rule;
|
||||
}
|
||||
|
||||
public int BaggageRule_CountChilds(string color, Dictionary<string, BaggageRule> dictRules)
|
||||
private int BaggageRule_CountChildren(string color, Dictionary<string, BaggageRule> dictRules)
|
||||
{
|
||||
int cnt = 0;
|
||||
BaggageRule rule = dictRules[color];
|
||||
foreach (BaggageContainRule containRule in rule.Contain)
|
||||
{
|
||||
cnt += (BaggageRule_CountChilds(containRule.BagColor, dictRules) + 1) * containRule.Count;
|
||||
cnt += (BaggageRule_CountChildren(containRule.BagColor, dictRules) + 1) * containRule.Count;
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
@@ -124,14 +124,14 @@ public class Day08 : IDay
|
||||
return vm.Accumulator.ToString();
|
||||
}
|
||||
|
||||
public enum OpCode
|
||||
private enum OpCode
|
||||
{
|
||||
Acc,
|
||||
Jmp,
|
||||
Nop,
|
||||
}
|
||||
|
||||
public class Instruction
|
||||
private class Instruction
|
||||
{
|
||||
public OpCode OpCode { get; set; }
|
||||
public int Value { get; set; }
|
||||
@@ -154,14 +154,9 @@ public class Day08 : IDay
|
||||
OpCode = OpCode.Nop;
|
||||
}
|
||||
|
||||
if (parts[1].StartsWith("+"))
|
||||
{
|
||||
Value = Convert.ToInt32(parts[1].Substring(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
Value = Convert.ToInt32(parts[1]);
|
||||
}
|
||||
Value = Convert.ToInt32(parts[1].StartsWith("+")
|
||||
? parts[1].Substring(1)
|
||||
: parts[1]);
|
||||
Executed = false;
|
||||
}
|
||||
}
|
||||
@@ -176,7 +171,7 @@ public class Day08 : IDay
|
||||
|
||||
public VM(string[] inputs)
|
||||
{
|
||||
Instructions = new List<Instruction>();
|
||||
Instructions = [];
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
Instructions.Add(new Instruction(input));
|
||||
|
||||
@@ -163,5 +163,4 @@ public class Day09 : IDay
|
||||
|
||||
return firstInvalid;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,8 +10,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.3" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||
<PackageReference Include="xunit" Version="2.6.3"/>
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
@@ -19,7 +19,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2023\AdventOfCode2023.csproj" />
|
||||
<ProjectReference Include="..\AdventOfCode2023\AdventOfCode2023.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -5,24 +5,24 @@ public class Day01_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01? day = new Day01();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"1abc2",
|
||||
"pqr3stu8vwx",
|
||||
"a1b2c3d4e5f",
|
||||
"treb7uchet",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("142", result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01? day = new Day01();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"two1nine",
|
||||
"eightwothree",
|
||||
"abcone2threexyz",
|
||||
@@ -30,7 +30,7 @@ public class Day01_Tests
|
||||
"4nineeightseven2",
|
||||
"zoneight234",
|
||||
"7pqrstsixteen",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("281", result);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public class Day02_Tests
|
||||
Assert.Equal(0, game.Sets[2].Blue);
|
||||
Assert.Equal(2, game.Sets[2].Green);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Game_FromString__ValidExample2()
|
||||
{
|
||||
@@ -35,35 +35,35 @@ public class Day02_Tests
|
||||
Assert.Equal(0, game.Sets[2].Blue);
|
||||
Assert.Equal(5, game.Sets[2].Green);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day02 day = new();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
|
||||
string result = day.ResolvePart1([
|
||||
"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green",
|
||||
"Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue",
|
||||
"Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red",
|
||||
"Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red",
|
||||
"Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("8", result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day02 day = new();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
|
||||
string result = day.ResolvePart2([
|
||||
"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green",
|
||||
"Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue",
|
||||
"Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red",
|
||||
"Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red",
|
||||
"Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("2286", result);
|
||||
}
|
||||
|
||||
@@ -5,26 +5,26 @@ public class Day03_Tests
|
||||
[Fact]
|
||||
public void SearchNextSchemaNumber__NoNumbers__Null()
|
||||
{
|
||||
string[] inputs = new[] {
|
||||
string[] inputs = [
|
||||
"..........",
|
||||
"..........",
|
||||
"..........",
|
||||
};
|
||||
];
|
||||
Day03.SchemaNumber? number = Day03.SearchNextSchemaNumber(inputs, 0, 0);
|
||||
|
||||
|
||||
Assert.Null(number);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SearchNextSchemaNumber__OneNumber__Valid()
|
||||
{
|
||||
string[] inputs = new[] {
|
||||
string[] inputs = [
|
||||
"..........",
|
||||
"....420...",
|
||||
"..........",
|
||||
};
|
||||
];
|
||||
Day03.SchemaNumber? number = Day03.SearchNextSchemaNumber(inputs, 0, 0);
|
||||
|
||||
|
||||
Assert.NotNull(number);
|
||||
Assert.Equal(1, number.Value.Row);
|
||||
Assert.Equal(4, number.Value.Column);
|
||||
@@ -35,13 +35,13 @@ public class Day03_Tests
|
||||
[Fact]
|
||||
public void SearchNextSchemaNumber__TwoNumbersSkipFirst__ValidSecond()
|
||||
{
|
||||
string[] inputs = new[] {
|
||||
string[] inputs = [
|
||||
"69........",
|
||||
"....420...",
|
||||
"..........",
|
||||
};
|
||||
];
|
||||
Day03.SchemaNumber? number = Day03.SearchNextSchemaNumber(inputs, 0, 4);
|
||||
|
||||
|
||||
Assert.NotNull(number);
|
||||
Assert.Equal(1, number.Value.Row);
|
||||
Assert.Equal(4, number.Value.Column);
|
||||
@@ -49,7 +49,7 @@ public class Day03_Tests
|
||||
Assert.Equal(420, number.Value.Value);
|
||||
}
|
||||
|
||||
private string[] _example = new[] {
|
||||
private string[] _example = [
|
||||
"467..114..",
|
||||
"...*......",
|
||||
"..35..633.",
|
||||
@@ -60,24 +60,24 @@ public class Day03_Tests
|
||||
"......755.",
|
||||
"...$.*....",
|
||||
".664.598..",
|
||||
};
|
||||
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day03 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("4361", result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day03 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("467835", result);
|
||||
|
||||
@@ -2,20 +2,20 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day04_Tests
|
||||
{
|
||||
private readonly string[] _example = {
|
||||
private readonly string[] _example = [
|
||||
"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53",
|
||||
"Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19",
|
||||
"Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1",
|
||||
"Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83",
|
||||
"Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36",
|
||||
"Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day04 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("13", result);
|
||||
@@ -25,7 +25,7 @@ public class Day04_Tests
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day04 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("30", result);
|
||||
|
||||
@@ -2,7 +2,7 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day05_Tests
|
||||
{
|
||||
private readonly string[] _example = {
|
||||
private readonly string[] _example = [
|
||||
"seeds: 79 14 55 13",
|
||||
"",
|
||||
"seed-to-soil map:",
|
||||
@@ -36,13 +36,13 @@ public class Day05_Tests
|
||||
"humidity-to-location map:",
|
||||
"60 56 37",
|
||||
"56 93 4",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day05 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("35", result);
|
||||
@@ -52,7 +52,7 @@ public class Day05_Tests
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day05 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("46", result);
|
||||
@@ -61,22 +61,22 @@ public class Day05_Tests
|
||||
[Fact]
|
||||
public void AlmanacMapping_ParseNext__Empty__Null()
|
||||
{
|
||||
Day05.LinesReader reader = new(Array.Empty<string>());
|
||||
Day05.LinesReader reader = new([]);
|
||||
Day05.AlmanacMapping? mapping = Day05.AlmanacMapping.ParseNext(reader);
|
||||
|
||||
|
||||
Assert.Null(mapping);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void AlmanacMapping_ParseNext__Example1()
|
||||
{
|
||||
Day05.LinesReader reader = new(new[] {
|
||||
Day05.LinesReader reader = new([
|
||||
"seed-to-soil map:",
|
||||
"50 98 2",
|
||||
"52 50 48",
|
||||
});
|
||||
]);
|
||||
Day05.AlmanacMapping? mapping = Day05.AlmanacMapping.ParseNext(reader);
|
||||
|
||||
|
||||
Assert.NotNull(mapping);
|
||||
Assert.Equal("seed-to-soil", mapping.Name);
|
||||
Assert.Equal(2, mapping.RangeMappings.Count);
|
||||
@@ -90,11 +90,11 @@ public class Day05_Tests
|
||||
const long value1 = 100;
|
||||
long valueMapped1 = mapping.Apply(value1);
|
||||
Assert.Equal(100, valueMapped1);
|
||||
|
||||
|
||||
const long value2 = 99;
|
||||
long valueMapped2 = mapping.Apply(value2);
|
||||
Assert.Equal(51, valueMapped2);
|
||||
|
||||
|
||||
const long value3 = 45;
|
||||
long valueMapped3 = mapping.Apply(value3);
|
||||
Assert.Equal(45, valueMapped3);
|
||||
@@ -109,7 +109,7 @@ public class Day05_Tests
|
||||
DestinationStart = 1000,
|
||||
Length = 10,
|
||||
};
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// #####.........................
|
||||
Day05.AlmanacRangeMapping range_Lower = new() {
|
||||
@@ -124,7 +124,7 @@ public class Day05_Tests
|
||||
Assert.Equal(5, range_Lower_Result.PreClip.Value.Length);
|
||||
Assert.Null(range_Lower_Result.Clipped);
|
||||
Assert.Null(range_Lower_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// ##########....................
|
||||
Day05.AlmanacRangeMapping range_LowerTouching = new() {
|
||||
@@ -139,7 +139,7 @@ public class Day05_Tests
|
||||
Assert.Equal(10, range_LowerTouching_Result.PreClip.Value.Length);
|
||||
Assert.Null(range_LowerTouching_Result.Clipped);
|
||||
Assert.Null(range_LowerTouching_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// .........................#####
|
||||
Day05.AlmanacRangeMapping range_Upper = new() {
|
||||
@@ -154,7 +154,7 @@ public class Day05_Tests
|
||||
Assert.Equal(25, range_Upper_Result.PostClip.Value.OriginStart);
|
||||
Assert.Equal(25, range_Upper_Result.PostClip.Value.DestinationStart);
|
||||
Assert.Equal(5, range_Upper_Result.PostClip.Value.Length);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// ....................##########
|
||||
Day05.AlmanacRangeMapping range_UpperTouching = new() {
|
||||
@@ -169,7 +169,7 @@ public class Day05_Tests
|
||||
Assert.Equal(20, range_UpperTouching_Result.PostClip.Value.OriginStart);
|
||||
Assert.Equal(20, range_UpperTouching_Result.PostClip.Value.DestinationStart);
|
||||
Assert.Equal(10, range_UpperTouching_Result.PostClip.Value.Length);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// ..........$$$$$$$$$$..........
|
||||
Day05.AlmanacRangeMapping range_IntersectCover = new() {
|
||||
@@ -184,7 +184,7 @@ public class Day05_Tests
|
||||
Assert.Equal(1000, range_IntersectCover_Result.Clipped.Value.DestinationStart);
|
||||
Assert.Equal(10, range_IntersectCover_Result.Clipped.Value.Length);
|
||||
Assert.Null(range_IntersectCover_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// ...............$$$$$..........
|
||||
Day05.AlmanacRangeMapping range_IntersectInsideToEnd = new() {
|
||||
@@ -199,7 +199,7 @@ public class Day05_Tests
|
||||
Assert.Equal(1005, range_IntersectInsideToEnd_Result.Clipped.Value.DestinationStart);
|
||||
Assert.Equal(5, range_IntersectInsideToEnd_Result.Clipped.Value.Length);
|
||||
Assert.Null(range_IntersectInsideToEnd_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// ...............$$$$$#####.....
|
||||
Day05.AlmanacRangeMapping range_IntersectInsideToOutside = new() {
|
||||
@@ -217,7 +217,7 @@ public class Day05_Tests
|
||||
Assert.Equal(20, range_IntersectInsideToOutside_Result.PostClip.Value.OriginStart);
|
||||
Assert.Equal(20, range_IntersectInsideToOutside_Result.PostClip.Value.DestinationStart);
|
||||
Assert.Equal(5, range_IntersectInsideToOutside_Result.PostClip.Value.Length);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// .....#####$$$$$...............
|
||||
Day05.AlmanacRangeMapping range_IntersectOutsideToInside = new() {
|
||||
@@ -235,7 +235,7 @@ public class Day05_Tests
|
||||
Assert.Equal(1000, range_IntersectOutsideToInside_Result.Clipped.Value.DestinationStart);
|
||||
Assert.Equal(5, range_IntersectOutsideToInside_Result.Clipped.Value.Length);
|
||||
Assert.Null(range_IntersectOutsideToInside_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// .....#####$$$$$$$$$$..........
|
||||
Day05.AlmanacRangeMapping range_IntersectOutsideToEnd = new() {
|
||||
@@ -253,7 +253,7 @@ public class Day05_Tests
|
||||
Assert.Equal(1000, range_IntersectOutsideToEnd_Result.Clipped.Value.DestinationStart);
|
||||
Assert.Equal(10, range_IntersectOutsideToEnd_Result.Clipped.Value.Length);
|
||||
Assert.Null(range_IntersectOutsideToEnd_Result.PostClip);
|
||||
|
||||
|
||||
// ..........■■■■■■■■■■..........
|
||||
// .....#####$$$$$$$$$$#####.....
|
||||
Day05.AlmanacRangeMapping range_IntersectOutsideToOutside = new() {
|
||||
|
||||
@@ -2,16 +2,16 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day06_Tests
|
||||
{
|
||||
private readonly string[] _example = {
|
||||
private readonly string[] _example = [
|
||||
"Time: 7 15 30",
|
||||
"Distance: 9 40 200",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day06 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("288", result);
|
||||
@@ -21,7 +21,7 @@ public class Day06_Tests
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day06 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("71503", result);
|
||||
|
||||
@@ -2,19 +2,19 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day07_Tests
|
||||
{
|
||||
private readonly string[] _example = {
|
||||
private readonly string[] _example = [
|
||||
"32T3K 765",
|
||||
"T55J5 684",
|
||||
"KK677 28",
|
||||
"KTJJT 220",
|
||||
"QQQJA 483",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day07 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("6440", result);
|
||||
@@ -24,7 +24,7 @@ public class Day07_Tests
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day07 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("5905", result);
|
||||
@@ -35,26 +35,26 @@ public class Day07_Tests
|
||||
{
|
||||
Day07.CamelCard card_FiveOfAKind = new("AAAAA");
|
||||
Assert.Equal(Day07.CamelCard.Types.FiveOfAKind, card_FiveOfAKind.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_FourOfAKind = new("AA8AA");
|
||||
Assert.Equal(Day07.CamelCard.Types.FourOfAKind, card_FourOfAKind.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_FullHouse = new("23332");
|
||||
Assert.Equal(Day07.CamelCard.Types.FullHouse, card_FullHouse.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_ThreeOfAKind = new("TTT98");
|
||||
Assert.Equal(Day07.CamelCard.Types.ThreeOfAKind, card_ThreeOfAKind.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_TwoPair = new("23432");
|
||||
Assert.Equal(Day07.CamelCard.Types.TwoPair, card_TwoPair.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_OnePair = new("A23A4");
|
||||
Assert.Equal(Day07.CamelCard.Types.OnePair, card_OnePair.Type);
|
||||
|
||||
|
||||
Day07.CamelCard card_HighCard = new("23456");
|
||||
Assert.Equal(Day07.CamelCard.Types.HighCard, card_HighCard.Type);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void CamelCard_CompareTo__Examples()
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public class Day07_Tests
|
||||
Day07.CamelCard card_02 = new("2AAAA");
|
||||
Assert.Equal(-1, card_01.CompareTo(card_02));
|
||||
Assert.Equal(1, card_02.CompareTo(card_01));
|
||||
|
||||
|
||||
Day07.CamelCard card_77888 = new("77888");
|
||||
Day07.CamelCard card_77788 = new("77788");
|
||||
Assert.Equal(-1, card_77888.CompareTo(card_77788));
|
||||
|
||||
@@ -2,7 +2,7 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day08_Tests
|
||||
{
|
||||
private readonly string[] _example1 = {
|
||||
private readonly string[] _example1 = [
|
||||
"RL",
|
||||
"",
|
||||
"AAA = (BBB, CCC)",
|
||||
@@ -12,37 +12,37 @@ public class Day08_Tests
|
||||
"EEE = (EEE, EEE)",
|
||||
"GGG = (GGG, GGG)",
|
||||
"ZZZ = (ZZZ, ZZZ)",
|
||||
};
|
||||
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
{
|
||||
Day08 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example1);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
}
|
||||
|
||||
private readonly string[] _example2 = {
|
||||
private readonly string[] _example2 = [
|
||||
"LLR",
|
||||
"",
|
||||
"AAA = (BBB, BBB)",
|
||||
"BBB = (AAA, ZZZ)",
|
||||
"ZZZ = (ZZZ, ZZZ)",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example2()
|
||||
{
|
||||
Day08 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example2);
|
||||
|
||||
Assert.Equal("6", result);
|
||||
}
|
||||
|
||||
private readonly string[] _example3 = {
|
||||
private readonly string[] _example3 = [
|
||||
"LR",
|
||||
"",
|
||||
"11A = (11B, XXX)",
|
||||
@@ -53,16 +53,15 @@ public class Day08_Tests
|
||||
"22C = (22Z, 22Z)",
|
||||
"22Z = (22B, 22B)",
|
||||
"XXX = (XXX, XXX)",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example3()
|
||||
{
|
||||
Day08 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example3);
|
||||
|
||||
Assert.Equal("6", result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,17 +2,17 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day09_Tests
|
||||
{
|
||||
private readonly string[] _example = {
|
||||
private readonly string[] _example = [
|
||||
"0 3 6 9 12 15",
|
||||
"1 3 6 10 15 21",
|
||||
"10 13 16 21 30 45",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example);
|
||||
|
||||
Assert.Equal("114", result);
|
||||
@@ -22,7 +22,7 @@ public class Day09_Tests
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
Day09 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example);
|
||||
|
||||
Assert.Equal("2", result);
|
||||
@@ -35,7 +35,7 @@ public class Day09_Tests
|
||||
long result = extrapolator.Extrapolate();
|
||||
Assert.Equal(18, result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Extrapolator_Extrapolate__Example2()
|
||||
{
|
||||
@@ -43,7 +43,7 @@ public class Day09_Tests
|
||||
long result = extrapolator.Extrapolate();
|
||||
Assert.Equal(28, result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Extrapolator_Extrapolate__Example3()
|
||||
{
|
||||
@@ -59,7 +59,7 @@ public class Day09_Tests
|
||||
long result = extrapolator.ExtrapolatePast();
|
||||
Assert.Equal(-3, result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Extrapolator_ExtrapolatePast__Example2()
|
||||
{
|
||||
@@ -67,7 +67,7 @@ public class Day09_Tests
|
||||
long result = extrapolator.ExtrapolatePast();
|
||||
Assert.Equal(0, result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void Extrapolator_ExtrapolatePast__Example3()
|
||||
{
|
||||
|
||||
@@ -2,25 +2,25 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day10_Tests
|
||||
{
|
||||
private readonly string[] _example1 = {
|
||||
private readonly string[] _example1 = [
|
||||
"7-F7-",
|
||||
".FJ|7",
|
||||
"SJLL7",
|
||||
"|F--J",
|
||||
"LJ.LJ",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
{
|
||||
Day10 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example1);
|
||||
|
||||
Assert.Equal("8", result);
|
||||
}
|
||||
|
||||
private readonly string[] _example2 = {
|
||||
|
||||
private readonly string[] _example2 = [
|
||||
"...........",
|
||||
".S-------7.",
|
||||
".|F-----7|.",
|
||||
@@ -30,20 +30,20 @@ public class Day10_Tests
|
||||
".|..|.|..|.",
|
||||
".L--J.L--J.",
|
||||
"...........",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example2()
|
||||
{
|
||||
Day10 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example2);
|
||||
|
||||
Assert.Equal("4", result);
|
||||
}
|
||||
|
||||
|
||||
private readonly string[] _example3 = {
|
||||
|
||||
private readonly string[] _example3 = [
|
||||
"FF7FSF7F7F7F7F7F---7",
|
||||
"L|LJ||||||||||||F--J",
|
||||
"FL-7LJLJ||||||LJL-77",
|
||||
@@ -54,13 +54,13 @@ public class Day10_Tests
|
||||
"7-L-JL7||F7|L7F-7F7|",
|
||||
"L.L7LFJ|||||FJL7||LJ",
|
||||
"L7JLJL-JLJLJL--JLJ.L",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example3()
|
||||
{
|
||||
Day10 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart2(_example3);
|
||||
|
||||
Assert.Equal("10", result);
|
||||
|
||||
@@ -2,7 +2,7 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day11_Tests
|
||||
{
|
||||
private readonly string[] _example1 = {
|
||||
private readonly string[] _example1 = [
|
||||
"...#......",
|
||||
".......#..",
|
||||
"#.........",
|
||||
@@ -13,16 +13,15 @@ public class Day11_Tests
|
||||
"..........",
|
||||
".......#..",
|
||||
"#...#.....",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
{
|
||||
Day11 day = new();
|
||||
|
||||
|
||||
string result = day.ResolvePart1(_example1);
|
||||
|
||||
Assert.Equal("374", result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,14 +2,14 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day12_Tests
|
||||
{
|
||||
private readonly string[] _example1 = {
|
||||
private readonly string[] _example1 = [
|
||||
"???.### 1,1,3",
|
||||
".??..??...?##. 1,1,3",
|
||||
"?#?#?#?#?#?#?#? 1,3,1,6",
|
||||
"????.#...#... 4,1,1",
|
||||
"????.######..#####. 1,6,5",
|
||||
"?###???????? 3,2,1",
|
||||
};
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
|
||||
@@ -10,14 +10,14 @@ namespace AdventOfCode2023.Tests;
|
||||
|
||||
public class Day24_Tests
|
||||
{
|
||||
private string[] _example1 = {
|
||||
private string[] _example1 = [
|
||||
"19, 13, 30 @ -2, 1, -2",
|
||||
"18, 19, 22 @ -1, -1, -2",
|
||||
"20, 25, 34 @ -2, -2, -4",
|
||||
"12, 31, 28 @ -1, -2, -1",
|
||||
"20, 19, 15 @ 1, -5, -3",
|
||||
};
|
||||
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart1__Example1()
|
||||
{
|
||||
@@ -36,36 +36,35 @@ public class Day24_Tests
|
||||
Day24.Hail hailC = new("20, 25, 34 @ -2, -2, -4");
|
||||
Day24.Hail hailD = new("12, 31, 28 @ -1, -2, -1");
|
||||
Day24.Hail hailE = new("20, 19, 15 @ 1, -5, -3");
|
||||
|
||||
|
||||
(bool intersect_A_B, _, _, _) = hailA.Intersect2D(hailB);
|
||||
Assert.True(intersect_A_B);
|
||||
|
||||
|
||||
(bool intersect_A_C, _, _, _) = hailA.Intersect2D(hailC);
|
||||
Assert.True(intersect_A_C);
|
||||
|
||||
|
||||
(bool intersect_A_D, _, _, _) = hailA.Intersect2D(hailD);
|
||||
Assert.True(intersect_A_D);
|
||||
|
||||
|
||||
(bool intersect_A_E, _, _, _) = hailA.Intersect2D(hailE);
|
||||
Assert.True(intersect_A_E);
|
||||
|
||||
|
||||
(bool intersect_B_C, _, _, _) = hailB.Intersect2D(hailC);
|
||||
Assert.False(intersect_B_C);
|
||||
|
||||
|
||||
(bool intersect_B_D, _, _, _) = hailB.Intersect2D(hailD);
|
||||
Assert.True(intersect_B_D);
|
||||
|
||||
|
||||
(bool intersect_B_E, _, _, _) = hailB.Intersect2D(hailE);
|
||||
Assert.True(intersect_B_E);
|
||||
|
||||
|
||||
(bool intersect_C_D, _, _, _) = hailC.Intersect2D(hailD);
|
||||
Assert.True(intersect_C_D);
|
||||
|
||||
|
||||
(bool intersect_C_E, _, _, _) = hailC.Intersect2D(hailE);
|
||||
Assert.True(intersect_C_E);
|
||||
|
||||
|
||||
(bool intersect_D_E, _, _, _) = hailD.Intersect2D(hailE);
|
||||
Assert.True(intersect_D_E);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,7 +15,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj" />
|
||||
<ProjectReference Include="..\AdventOfCode.Common\AdventOfCode.Common.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -78,7 +78,7 @@ public class Day01 : IDay
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
List<(string Text, int Value)> digits = new() {
|
||||
List<(string Text, int Value)> digits = [
|
||||
("1", 1),
|
||||
("2", 2),
|
||||
("3", 3),
|
||||
@@ -97,7 +97,7 @@ public class Day01 : IDay
|
||||
("seven", 7),
|
||||
("eight", 8),
|
||||
("nine", 9),
|
||||
};
|
||||
];
|
||||
|
||||
int sum = 0;
|
||||
foreach (string line in inputs)
|
||||
|
||||
@@ -102,7 +102,7 @@ public class Day03 : IDay
|
||||
for (column = 0; column < inputs[row].Length; column++)
|
||||
{
|
||||
if (inputs[row][column] != '*') { continue; }
|
||||
|
||||
|
||||
List<SchemaNumber> adjacentNumbers = numbers.Where(n => CellAdjacentToSchemaNumber(row, column, n)).ToList();
|
||||
if (adjacentNumbers.Count != 2) { continue; }
|
||||
|
||||
@@ -115,11 +115,11 @@ public class Day03 : IDay
|
||||
|
||||
public struct SchemaNumber
|
||||
{
|
||||
public string[] Schema { get; set; }
|
||||
public int Row { get; set; }
|
||||
public int Column { get; set; }
|
||||
public int Lenght { get; set; }
|
||||
public int Value { get; set; }
|
||||
public string[] Schema { get; init; }
|
||||
public int Row { get; init; }
|
||||
public int Column { get; init; }
|
||||
public int Lenght { get; init; }
|
||||
public int Value { get; init; }
|
||||
}
|
||||
|
||||
public static SchemaNumber? SearchNextSchemaNumber(string[] schema, int initialRow, int initialColumn)
|
||||
@@ -176,7 +176,7 @@ public class Day03 : IDay
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private static bool CellAdjacentToSchemaNumber(int row, int column, SchemaNumber number)
|
||||
{
|
||||
int minRow = number.Row - 1;
|
||||
@@ -188,8 +188,7 @@ public class Day03 : IDay
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -118,7 +118,7 @@ public class Day04 : IDay
|
||||
_winningNumbers = GetNumbers(strColumns[0]);
|
||||
_myNumbers = GetNumbers(strColumns[1]);
|
||||
}
|
||||
|
||||
|
||||
private static List<int> GetNumbers(string strNumbers)
|
||||
{
|
||||
string[] parts = strNumbers.Split(' ');
|
||||
@@ -135,6 +135,5 @@ public class Day04 : IDay
|
||||
{
|
||||
return _myNumbers.Count(myNumber => _winningNumbers.Contains(myNumber));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ public class Day05 : IDay
|
||||
LinesReader reader = new(inputs);
|
||||
Almanac? almanac = Almanac.Parse(reader);
|
||||
int i = 0;
|
||||
List<AlmanacRangeMapping> ranges = new();
|
||||
List<AlmanacRangeMapping> ranges = [];
|
||||
while (almanac?.Seeds.Count > i)
|
||||
{
|
||||
long seed = almanac.Seeds[i];
|
||||
@@ -155,21 +155,14 @@ public class Day05 : IDay
|
||||
}
|
||||
|
||||
|
||||
public class LinesReader
|
||||
public class LinesReader(string[] lines)
|
||||
{
|
||||
private readonly string[] _lines;
|
||||
private int _index;
|
||||
|
||||
public LinesReader(string[] lines)
|
||||
{
|
||||
_lines = lines;
|
||||
_index = 0;
|
||||
}
|
||||
|
||||
public string? GetLine()
|
||||
{
|
||||
if (_index >= _lines.Length) { return null; }
|
||||
string line = _lines[_index];
|
||||
if (_index >= lines.Length) { return null; }
|
||||
string line = lines[_index];
|
||||
_index++;
|
||||
return line;
|
||||
}
|
||||
@@ -298,7 +291,7 @@ public class Day05 : IDay
|
||||
{
|
||||
public string Name { get; private init; } = string.Empty;
|
||||
|
||||
public List<AlmanacRangeMapping> RangeMappings { get; } = new();
|
||||
public List<AlmanacRangeMapping> RangeMappings { get; } = [];
|
||||
|
||||
public static AlmanacMapping? ParseNext(LinesReader reader)
|
||||
{
|
||||
@@ -346,29 +339,32 @@ public class Day05 : IDay
|
||||
|
||||
public List<AlmanacRangeMapping> Apply(AlmanacRangeMapping range)
|
||||
{
|
||||
List<AlmanacRangeMapping> unMappedRanges = new() {
|
||||
List<AlmanacRangeMapping> unMappedRanges = [
|
||||
range,
|
||||
};
|
||||
List<AlmanacRangeMapping> newUnMappedRanges = new();
|
||||
List<AlmanacRangeMapping> mappedRanges = new();
|
||||
];
|
||||
List<AlmanacRangeMapping> newUnMappedRanges = [];
|
||||
List<AlmanacRangeMapping> mappedRanges = [];
|
||||
|
||||
int i = 0;
|
||||
while (RangeMappings.Count > i)
|
||||
{
|
||||
AlmanacRangeMapping rangeMapping = RangeMappings[i];
|
||||
for (int j = 0; j < unMappedRanges.Count; j++)
|
||||
foreach (AlmanacRangeMapping unMappedRange in unMappedRanges)
|
||||
{
|
||||
AlmanacRangeMapping.ClipResult result = rangeMapping.Clip(unMappedRanges[j]);
|
||||
AlmanacRangeMapping.ClipResult result = rangeMapping.Clip(unMappedRange);
|
||||
if (result.Clipped != null) { mappedRanges.Add(result.Clipped.Value); }
|
||||
if (result.PreClip != null) { newUnMappedRanges.Add(result.PreClip.Value); }
|
||||
if (result.PostClip != null) { newUnMappedRanges.Add(result.PostClip.Value); }
|
||||
}
|
||||
unMappedRanges = newUnMappedRanges;
|
||||
newUnMappedRanges = new List<AlmanacRangeMapping>();
|
||||
newUnMappedRanges = [];
|
||||
i++;
|
||||
}
|
||||
|
||||
return mappedRanges.Union(unMappedRanges).ToList();
|
||||
List<AlmanacRangeMapping> resultMappedRanges = [];
|
||||
resultMappedRanges.AddRange(mappedRanges);
|
||||
resultMappedRanges.AddRange(unMappedRanges);
|
||||
return resultMappedRanges;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -381,7 +377,7 @@ public class Day05 : IDay
|
||||
|
||||
public List<long> Seeds { get; }
|
||||
|
||||
private List<AlmanacMapping> Mappings { get; } = new();
|
||||
private List<AlmanacMapping> Mappings { get; } = [];
|
||||
|
||||
public static Almanac? Parse(LinesReader reader)
|
||||
{
|
||||
|
||||
@@ -114,9 +114,9 @@ public class Day07 : IDay
|
||||
|
||||
public class CamelCard
|
||||
{
|
||||
private readonly static char[] Labels = { 'A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2' };
|
||||
private readonly static char[] Labels = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'];
|
||||
|
||||
private readonly static char[] LabelsWithJoker = { 'A', 'K', 'Q', 'T', '9', '8', '7', '6', '5', '4', '3', '2', 'J' };
|
||||
private readonly static char[] LabelsWithJoker = ['A', 'K', 'Q', 'T', '9', '8', '7', '6', '5', '4', '3', '2', 'J'];
|
||||
private const char JokerLabel = 'J';
|
||||
|
||||
public enum Types
|
||||
@@ -174,7 +174,7 @@ public class Day07 : IDay
|
||||
dictLabelCounts.Add(JokerLabel, 5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (dictLabelCounts.Count == 1) { return Types.FiveOfAKind; }
|
||||
if (dictLabelCounts.Count == 5) { return Types.HighCard; }
|
||||
if (dictLabelCounts.Count == 2)
|
||||
|
||||
@@ -105,18 +105,11 @@ public class Day08 : IDay
|
||||
return steps.ToString();
|
||||
}
|
||||
|
||||
private class MapNode
|
||||
private class MapNode(string strMapNode)
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public string LeftKey { get; set; }
|
||||
public string RightKey { get; set; }
|
||||
|
||||
public MapNode(string strMapNode)
|
||||
{
|
||||
Key = strMapNode.Substring(0, 3);
|
||||
LeftKey = strMapNode.Substring(7, 3);
|
||||
RightKey = strMapNode.Substring(12, 3);
|
||||
}
|
||||
public string Key { get; } = strMapNode.Substring(0, 3);
|
||||
public string LeftKey { get; } = strMapNode.Substring(7, 3);
|
||||
public string RightKey { get; } = strMapNode.Substring(12, 3);
|
||||
}
|
||||
|
||||
private class Map
|
||||
@@ -155,32 +148,23 @@ public class Day08 : IDay
|
||||
}
|
||||
}
|
||||
|
||||
private class MapWalker
|
||||
private class MapWalker(Map map, string startKey)
|
||||
{
|
||||
private readonly Map _map;
|
||||
|
||||
private MapNode _currentNode;
|
||||
private MapNode _currentNode = map.GetByKey(startKey) ?? map.Nodes.First();
|
||||
private long _steps;
|
||||
|
||||
public MapWalker(Map map, string startKey)
|
||||
{
|
||||
_map = map;
|
||||
_currentNode = map.GetByKey(startKey) ?? map.Nodes.First();
|
||||
_steps = 0;
|
||||
}
|
||||
|
||||
public void StepWhile(Func<MapWalker, bool> condition)
|
||||
{
|
||||
while (condition(this))
|
||||
{
|
||||
char leftRightInstruction = _map.GetInstruction(_steps);
|
||||
char leftRightInstruction = map.GetInstruction(_steps);
|
||||
if (leftRightInstruction == 'L')
|
||||
{
|
||||
_currentNode = _map.GetByKey(_currentNode.LeftKey) ?? _map.Nodes.First();
|
||||
_currentNode = map.GetByKey(_currentNode.LeftKey) ?? map.Nodes.First();
|
||||
}
|
||||
if (leftRightInstruction == 'R')
|
||||
{
|
||||
_currentNode = _map.GetByKey(_currentNode.RightKey) ?? _map.Nodes.First();
|
||||
_currentNode = map.GetByKey(_currentNode.RightKey) ?? map.Nodes.First();
|
||||
}
|
||||
_steps++;
|
||||
}
|
||||
@@ -196,7 +180,7 @@ public class Day08 : IDay
|
||||
get { return _steps; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations
|
||||
private static long GreatestCommonDivisor(long a, long b)
|
||||
{
|
||||
|
||||
@@ -164,15 +164,15 @@ public class Day09 : IDay
|
||||
|
||||
return newLastNumber;
|
||||
}
|
||||
|
||||
|
||||
public long ExtrapolatePast()
|
||||
{
|
||||
_derivatives.Last().Insert(0,0);
|
||||
_derivatives.Last().Insert(0, 0);
|
||||
for (int i = _derivatives.Count - 2; i >= 0; i--)
|
||||
{
|
||||
long firstDerivative1 = _derivatives[i].First();
|
||||
long firstDerivative0 = _derivatives[i + 1].First();
|
||||
_derivatives[i].Insert(0,firstDerivative1 - firstDerivative0);
|
||||
_derivatives[i].Insert(0, firstDerivative1 - firstDerivative0);
|
||||
}
|
||||
long firstNumber = _numbers.First();
|
||||
long firstDerivative = _derivatives[0].First();
|
||||
|
||||
@@ -228,16 +228,10 @@ public class Day10 : IDay
|
||||
return countInside.ToString();
|
||||
}
|
||||
|
||||
private struct Point
|
||||
private struct Point(int x, int y)
|
||||
{
|
||||
public int X;
|
||||
public int Y;
|
||||
|
||||
public Point(int x, int y)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
}
|
||||
public int X = x;
|
||||
public int Y = y;
|
||||
}
|
||||
|
||||
private class PipeMaze
|
||||
@@ -323,7 +317,7 @@ public class Day10 : IDay
|
||||
x: point.X + 1,
|
||||
y: point.Y);
|
||||
}
|
||||
if(point.Y == prevPoint.Y && prevPoint.X > point.X)
|
||||
if (point.Y == prevPoint.Y && prevPoint.X > point.X)
|
||||
{
|
||||
return new Point(
|
||||
x: point.X,
|
||||
@@ -339,7 +333,7 @@ public class Day10 : IDay
|
||||
x: point.X - 1,
|
||||
y: point.Y);
|
||||
}
|
||||
if(point.Y == prevPoint.Y && prevPoint.X < point.X)
|
||||
if (point.Y == prevPoint.Y && prevPoint.X < point.X)
|
||||
{
|
||||
return new Point(
|
||||
x: point.X,
|
||||
@@ -355,7 +349,7 @@ public class Day10 : IDay
|
||||
x: point.X - 1,
|
||||
y: point.Y);
|
||||
}
|
||||
if(point.Y == prevPoint.Y && prevPoint.X < point.X)
|
||||
if (point.Y == prevPoint.Y && prevPoint.X < point.X)
|
||||
{
|
||||
return new Point(
|
||||
x: point.X,
|
||||
@@ -371,7 +365,7 @@ public class Day10 : IDay
|
||||
x: point.X + 1,
|
||||
y: point.Y);
|
||||
}
|
||||
if(point.Y == prevPoint.Y && prevPoint.X > point.X)
|
||||
if (point.Y == prevPoint.Y && prevPoint.X > point.X)
|
||||
{
|
||||
return new Point(
|
||||
x: point.X,
|
||||
@@ -397,7 +391,7 @@ public class Day10 : IDay
|
||||
{
|
||||
Point? nextPoint = FollowPipe(point, prevPoint);
|
||||
if (nextPoint == null) { break; }
|
||||
|
||||
|
||||
distance++;
|
||||
int? currentDistance = GetDistance(point);
|
||||
if (currentDistance > distance || currentDistance == null)
|
||||
@@ -409,7 +403,7 @@ public class Day10 : IDay
|
||||
point = nextPoint.Value;
|
||||
} while (true);
|
||||
}
|
||||
|
||||
|
||||
public int GetMaxDistance()
|
||||
{
|
||||
int max = int.MinValue;
|
||||
@@ -438,10 +432,10 @@ public class Day10 : IDay
|
||||
|
||||
private char CalculateCell(Point point)
|
||||
{
|
||||
Point? pointRight =FollowPipe(new Point(point.X + 1, point.Y), point);
|
||||
Point? pointLeft =FollowPipe(new Point(point.X - 1, point.Y), point);
|
||||
Point? pointDown =FollowPipe(new Point(point.X, point.Y + 1), point);
|
||||
Point? pointUp =FollowPipe(new Point(point.X, point.Y - 1), point);
|
||||
Point? pointRight = FollowPipe(new Point(point.X + 1, point.Y), point);
|
||||
Point? pointLeft = FollowPipe(new Point(point.X - 1, point.Y), point);
|
||||
Point? pointDown = FollowPipe(new Point(point.X, point.Y + 1), point);
|
||||
Point? pointUp = FollowPipe(new Point(point.X, point.Y - 1), point);
|
||||
if (pointRight != null && pointLeft == null && pointDown != null && pointUp == null)
|
||||
{
|
||||
return 'F';
|
||||
@@ -507,12 +501,12 @@ public class Day10 : IDay
|
||||
}
|
||||
else if (cell == 'J')
|
||||
{
|
||||
if(cellStart == 'F')
|
||||
if (cellStart == 'F')
|
||||
{
|
||||
inside = inside != true;
|
||||
cellStart = null;
|
||||
}
|
||||
else if(cellStart == 'L')
|
||||
else if (cellStart == 'L')
|
||||
{
|
||||
cellStart = null;
|
||||
}
|
||||
@@ -523,23 +517,23 @@ public class Day10 : IDay
|
||||
{
|
||||
cellStart = 'F';
|
||||
}
|
||||
else if(cellStart == 'J')
|
||||
else if (cellStart == 'J')
|
||||
{
|
||||
inside = inside != true;
|
||||
cellStart = null;
|
||||
}
|
||||
else if(cellStart == '7')
|
||||
else if (cellStart == '7')
|
||||
{
|
||||
cellStart = null;
|
||||
}
|
||||
}
|
||||
else if (cell == '7')
|
||||
{
|
||||
if(cellStart == 'F')
|
||||
if (cellStart == 'F')
|
||||
{
|
||||
cellStart = null;
|
||||
}
|
||||
else if(cellStart == 'L')
|
||||
else if (cellStart == 'L')
|
||||
{
|
||||
inside = inside != true;
|
||||
cellStart = null;
|
||||
@@ -551,11 +545,11 @@ public class Day10 : IDay
|
||||
{
|
||||
cellStart = 'L';
|
||||
}
|
||||
else if(cellStart == 'J')
|
||||
else if (cellStart == 'J')
|
||||
{
|
||||
cellStart = null;
|
||||
}
|
||||
else if(cellStart == '7')
|
||||
else if (cellStart == '7')
|
||||
{
|
||||
inside = inside != true;
|
||||
cellStart = null;
|
||||
|
||||
@@ -130,8 +130,8 @@ public class Day11 : IDay
|
||||
|
||||
private struct Point
|
||||
{
|
||||
public long X { get; set; }
|
||||
public long Y { get; set; }
|
||||
public long X { get; init; }
|
||||
public long Y { get; init; }
|
||||
}
|
||||
|
||||
private class GalaxyMap
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Text;
|
||||
|
||||
namespace AdventOfCode2023;
|
||||
|
||||
@@ -212,7 +211,7 @@ public class Day12 : IDay
|
||||
{
|
||||
throw new Exception("Invalid input");
|
||||
}
|
||||
|
||||
|
||||
if (springsRecord.Length < damagedSprings[0])
|
||||
{
|
||||
// Invalid match; Not enough data on record for the current damagedSprings group
|
||||
@@ -230,7 +229,7 @@ public class Day12 : IDay
|
||||
// Skip current damagedSprings group
|
||||
return CountPossibleArrangements(springsRecord.Substring(damagedSprings[0]), damagedSprings.Skip(1).ToArray());
|
||||
}
|
||||
|
||||
|
||||
if (springsRecord.Length < (damagedSprings[0] + 1) || springsRecord[damagedSprings[0]] == '#')
|
||||
{
|
||||
// Invalid match; There must be an operational (or unknown) spring between damaged spring groups
|
||||
|
||||
@@ -103,24 +103,17 @@ public class Day24 : IDay
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public struct Vector3D
|
||||
public struct Vector3D(long x, long y, long z)
|
||||
{
|
||||
public readonly long X;
|
||||
public readonly long Y;
|
||||
public readonly long Z;
|
||||
|
||||
public Vector3D(long x, long y, long z)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
}
|
||||
public readonly long X = x;
|
||||
public readonly long Y = y;
|
||||
public readonly long Z = z;
|
||||
}
|
||||
|
||||
public readonly struct Hail
|
||||
{
|
||||
public readonly Vector3D Position;
|
||||
public readonly Vector3D Velocity;
|
||||
private readonly Vector3D _velocity;
|
||||
|
||||
public Hail(string input)
|
||||
{
|
||||
@@ -131,7 +124,7 @@ public class Day24 : IDay
|
||||
y: Convert.ToInt64(strPosition[1]),
|
||||
z: Convert.ToInt64(strPosition[2]));
|
||||
string[] strVelocity = parts[1].Split(", ");
|
||||
Velocity = new Vector3D(
|
||||
_velocity = new Vector3D(
|
||||
x: Convert.ToInt64(strVelocity[0]),
|
||||
y: Convert.ToInt64(strVelocity[1]),
|
||||
z: Convert.ToInt64(strVelocity[2]));
|
||||
@@ -139,21 +132,21 @@ public class Day24 : IDay
|
||||
|
||||
public (bool intersects, double s, double t, Vector3D point) Intersect2D(Hail other)
|
||||
{
|
||||
long s_Div = (-other.Velocity.X * Velocity.Y + Velocity.X * other.Velocity.Y);
|
||||
long s_Div = (-other._velocity.X * _velocity.Y + _velocity.X * other._velocity.Y);
|
||||
if (s_Div == 0)
|
||||
{
|
||||
return (false, 0, 0, new Vector3D());
|
||||
}
|
||||
double s = (-Velocity.Y * (Position.X - other.Position.X) + Velocity.X * (Position.Y - other.Position.Y)) / (double)s_Div;
|
||||
double s = (-_velocity.Y * (Position.X - other.Position.X) + _velocity.X * (Position.Y - other.Position.Y)) / (double)s_Div;
|
||||
|
||||
long t_Div = (-other.Velocity.X * Velocity.Y + Velocity.X * other.Velocity.Y);
|
||||
long t_Div = (-other._velocity.X * _velocity.Y + _velocity.X * other._velocity.Y);
|
||||
if (t_Div == 0)
|
||||
{
|
||||
return (false, 0, 0, new Vector3D());
|
||||
}
|
||||
double t = (other.Velocity.X * (Position.Y - other.Position.Y) - other.Velocity.Y * (Position.X - other.Position.X)) / (double)t_Div;
|
||||
double t = (other._velocity.X * (Position.Y - other.Position.Y) - other._velocity.Y * (Position.X - other.Position.X)) / (double)t_Div;
|
||||
|
||||
Vector3D intersection = new((long)(Position.X + t * Velocity.X), (long)(Position.Y + t * Velocity.Y), 0);
|
||||
Vector3D intersection = new((long)(Position.X + t * _velocity.X), (long)(Position.Y + t * _velocity.Y), 0);
|
||||
return (true, s, t, intersection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>AdventOfCode2023.Tests</RootNamespace>
|
||||
<RootNamespace>AdventOfCode2024.Tests</RootNamespace>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
@@ -24,7 +24,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdventOfCode2024\AdventOfCode2024.csproj" />
|
||||
<ProjectReference Include="..\AdventOfCode2024\AdventOfCode2024.csproj"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -5,33 +5,33 @@ public class Day01_Tests
|
||||
[Fact]
|
||||
public void ResolvePart1__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01 day = new Day01();
|
||||
|
||||
string result = day.ResolvePart1(new[] {
|
||||
string result = day.ResolvePart1([
|
||||
"3 4",
|
||||
"4 3",
|
||||
"2 5",
|
||||
"1 3",
|
||||
"3 9",
|
||||
"3 3",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("11", result);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ResolvePart2__Example()
|
||||
{
|
||||
var day = new Day01();
|
||||
Day01 day = new Day01();
|
||||
|
||||
string result = day.ResolvePart2(new[] {
|
||||
string result = day.ResolvePart2([
|
||||
"3 4",
|
||||
"4 3",
|
||||
"2 5",
|
||||
"1 3",
|
||||
"3 9",
|
||||
"3 3",
|
||||
});
|
||||
]);
|
||||
|
||||
Assert.Equal("31", result);
|
||||
}
|
||||
|
||||
@@ -111,12 +111,12 @@ public class Day01 : IDay
|
||||
leftNumbers.Add(int.Parse(numbers[0]));
|
||||
rightNumbers.Add(int.Parse(numbers[1]));
|
||||
}
|
||||
|
||||
|
||||
long totalSim = 0;
|
||||
for (int i = 0; i < leftNumbers.Count; i++)
|
||||
foreach (int number in leftNumbers)
|
||||
{
|
||||
int count = rightNumbers.Count(x => x == leftNumbers[i]);
|
||||
int sim = leftNumbers[i] * count;
|
||||
int count = rightNumbers.Count(x => x == number);
|
||||
int sim = number * count;
|
||||
totalSim += sim;
|
||||
}
|
||||
return totalSim.ToString();
|
||||
|
||||
Reference in New Issue
Block a user