From 578681451b0599d300978517a7b69c5757f62bc3 Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sat, 16 Dec 2023 10:24:42 -0600
Subject: [PATCH 1/4] chore: scaffold for day 11 puzzle
---
.../CosmicExpansion.Tests.csproj | 30 +++++++++++++++++++
11/CosmicExpansion.Tests/GlobalUsings.cs | 2 ++
11/CosmicExpansion.Tests/UnitTest1.cs | 10 +++++++
11/CosmicExpansion/CosmicExpansion.csproj | 10 +++++++
11/CosmicExpansion/Program.cs | 2 ++
AdventOfCode2023.sln | 16 ++++++++++
6 files changed, 70 insertions(+)
create mode 100644 11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
create mode 100644 11/CosmicExpansion.Tests/GlobalUsings.cs
create mode 100644 11/CosmicExpansion.Tests/UnitTest1.cs
create mode 100644 11/CosmicExpansion/CosmicExpansion.csproj
create mode 100644 11/CosmicExpansion/Program.cs
diff --git a/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj b/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
new file mode 100644
index 0000000..74d97f9
--- /dev/null
+++ b/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
@@ -0,0 +1,30 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/11/CosmicExpansion.Tests/GlobalUsings.cs b/11/CosmicExpansion.Tests/GlobalUsings.cs
new file mode 100644
index 0000000..7fef4b0
--- /dev/null
+++ b/11/CosmicExpansion.Tests/GlobalUsings.cs
@@ -0,0 +1,2 @@
+global using Xunit;
+global using FluentAssertions;
\ No newline at end of file
diff --git a/11/CosmicExpansion.Tests/UnitTest1.cs b/11/CosmicExpansion.Tests/UnitTest1.cs
new file mode 100644
index 0000000..f54379d
--- /dev/null
+++ b/11/CosmicExpansion.Tests/UnitTest1.cs
@@ -0,0 +1,10 @@
+namespace CosmicExpansion.Tests;
+
+public class UnitTest1
+{
+ [Fact]
+ public void Test1()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/11/CosmicExpansion/CosmicExpansion.csproj b/11/CosmicExpansion/CosmicExpansion.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/11/CosmicExpansion/CosmicExpansion.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/11/CosmicExpansion/Program.cs b/11/CosmicExpansion/Program.cs
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ b/11/CosmicExpansion/Program.cs
@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git a/AdventOfCode2023.sln b/AdventOfCode2023.sln
index 6ea177f..34aded4 100644
--- a/AdventOfCode2023.sln
+++ b/AdventOfCode2023.sln
@@ -63,6 +63,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PipeMaze", "10\PipeMaze\Pip
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PipeMaze.Tests", "10\PipeMaze.Tests\PipeMaze.Tests.csproj", "{B1DA407F-DA29-4BDA-B10E-8B9A976B0C5E}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "11", "11", "{01A6D73F-996E-48B3-B111-2725016A49C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CosmicExpansion", "11\CosmicExpansion\CosmicExpansion.csproj", "{580A3C98-7A39-4323-839A-5C2E0B6E8E74}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CosmicExpansion.Tests", "11\CosmicExpansion.Tests\CosmicExpansion.Tests.csproj", "{0D6CD658-65BB-47DC-A865-E3428EBE3075}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -152,6 +158,14 @@ Global
{B1DA407F-DA29-4BDA-B10E-8B9A976B0C5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1DA407F-DA29-4BDA-B10E-8B9A976B0C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1DA407F-DA29-4BDA-B10E-8B9A976B0C5E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {580A3C98-7A39-4323-839A-5C2E0B6E8E74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {580A3C98-7A39-4323-839A-5C2E0B6E8E74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {580A3C98-7A39-4323-839A-5C2E0B6E8E74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {580A3C98-7A39-4323-839A-5C2E0B6E8E74}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0D6CD658-65BB-47DC-A865-E3428EBE3075}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0D6CD658-65BB-47DC-A865-E3428EBE3075}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0D6CD658-65BB-47DC-A865-E3428EBE3075}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0D6CD658-65BB-47DC-A865-E3428EBE3075}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3F8EAC09-4BC7-43AA-B72B-48DDD2710F6D} = {8C29858C-623A-461A-BF0B-254E151CD9C2}
@@ -174,5 +188,7 @@ Global
{5C39C115-ACBF-458A-9409-FBD23637A789} = {79203C8D-F382-4C95-90EA-FECEE65602DA}
{B46ADCFF-35FF-496D-A035-FE2B9FFC185A} = {9703A36A-A019-4ADC-93A7-9DF4EFBCBFBC}
{B1DA407F-DA29-4BDA-B10E-8B9A976B0C5E} = {9703A36A-A019-4ADC-93A7-9DF4EFBCBFBC}
+ {580A3C98-7A39-4323-839A-5C2E0B6E8E74} = {01A6D73F-996E-48B3-B111-2725016A49C2}
+ {0D6CD658-65BB-47DC-A865-E3428EBE3075} = {01A6D73F-996E-48B3-B111-2725016A49C2}
EndGlobalSection
EndGlobal
From e7af72913a2030c2f543b6bbf5f65ac9ab03db47 Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sat, 16 Dec 2023 20:36:09 -0600
Subject: [PATCH 2/4] feat: solve part 1 and part 2
---
.../CosmicExpansion.Tests.csproj | 6 +
11/CosmicExpansion.Tests/UnitTest1.cs | 10 -
11/CosmicExpansion.Tests/UniverseTests.cs | 143 +++++++++++++++
11/CosmicExpansion/Program.cs | 173 +++++++++++++++++-
4 files changed, 320 insertions(+), 12 deletions(-)
delete mode 100644 11/CosmicExpansion.Tests/UnitTest1.cs
create mode 100644 11/CosmicExpansion.Tests/UniverseTests.cs
diff --git a/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj b/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
index 74d97f9..08f293c 100644
--- a/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
+++ b/11/CosmicExpansion.Tests/CosmicExpansion.Tests.csproj
@@ -27,4 +27,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/11/CosmicExpansion.Tests/UnitTest1.cs b/11/CosmicExpansion.Tests/UnitTest1.cs
deleted file mode 100644
index f54379d..0000000
--- a/11/CosmicExpansion.Tests/UnitTest1.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace CosmicExpansion.Tests;
-
-public class UnitTest1
-{
- [Fact]
- public void Test1()
- {
-
- }
-}
\ No newline at end of file
diff --git a/11/CosmicExpansion.Tests/UniverseTests.cs b/11/CosmicExpansion.Tests/UniverseTests.cs
new file mode 100644
index 0000000..e99b316
--- /dev/null
+++ b/11/CosmicExpansion.Tests/UniverseTests.cs
@@ -0,0 +1,143 @@
+namespace CosmicExpansion.Tests;
+
+public class UniverseTests
+{
+ [Theory]
+ [MemberData(nameof(TestData.ParseTestData), MemberType = typeof(TestData))]
+ public void Parse_WhenGivenUniverseWithGalaxies_ItShouldReturnListOfGalaxies(string[] givenInput, Universe expectedUniverse)
+ {
+ var result = Universe.Parse(givenInput);
+ result.Should().BeEquivalentTo(expectedUniverse);
+ }
+
+ [Theory]
+ [MemberData(nameof(TestData.GetShortestPathsBetweenGalaxiesTestData), MemberType = typeof(TestData))]
+ public void GetShortestPathsBetweenGalaxies_WhenGivenUniverseWithGalaxies_ItShouldReturnShortestPathsBetweenGalaxies(Universe givenUniverse, int expectedNumberOrPaths)
+ {
+ var result = givenUniverse.GetShortestPathsBetweenGalaxies();
+ result.Count.Should().Be(expectedNumberOrPaths);
+ }
+
+ [Theory]
+ [MemberData(nameof(TestData.SumOfShortestPathsBetweenGalaxiesTestData), MemberType = typeof(TestData))]
+ public void SumOfShortestPathsBetweenGalaxies_WhenGivenUniverseWithGalaxies_ItShouldReturnSumOfShortestPathsBetweenGalaxies(Universe givenUniverse, int expectedSumOfShortestPaths)
+ {
+ givenUniverse.SumOfShortestPathsBetweenGalaxies.Should().Be(expectedSumOfShortestPaths);
+ }
+
+ [Theory]
+ [MemberData(nameof(TestData.CalculateDistanceBetweenGalaxiesTestData), MemberType = typeof(TestData))]
+ public void CalculateDistanceBetweenGalaxies_WhenGivenTwoGalaxies_ItShouldReturnDistanceBetweenGalaxies(Galaxy startGalaxy, Galaxy endGalaxy, int expectedDistance)
+ {
+ var result = Universe.CalculateDistanceBetweenGalaxies(startGalaxy, endGalaxy);
+ result.Should().Be(expectedDistance);
+ }
+
+ [Fact]
+ public void SumOfShortestPathsBetweenGalaxies_WhenGivenInput_ItShouldReturnSumOfShortestPathsBetweenGalaxies()
+ {
+ var input = File.ReadAllLines("INPUT.txt");
+ var universe = Universe.Parse(input);
+ universe.SumOfShortestPathsBetweenGalaxies.Should().Be(10292708);
+ }
+
+ [Fact]
+ public void SumOfShortestPathsBetweenGalaxies_WhenGivenInputAndIsPart2_ItShouldReturnSumOfShortestPathsBetweenGalaxies()
+ {
+ var input = File.ReadAllLines("INPUT.txt");
+ var universe = Universe.Parse(input, 1_000_000);
+ universe.SumOfShortestPathsBetweenGalaxies.Should().Be(790194712336);
+ }
+
+
+
+ public static class TestData
+ {
+ private static readonly Universe TestUniverse = new(
+ 12,
+ 13,
+ [
+ new(0, 4),
+ new(1, 9),
+ new(2, 0),
+ new(5, 8),
+ new(6, 1),
+ new(7, 12),
+ new(10, 9),
+ new(11, 0),
+ new(11, 5),
+ ]
+ );
+
+ public static IEnumerable