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