From 3d820e46520c8fe4abbf389ea2a12e226590e4da Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sat, 2 Dec 2023 09:31:45 -0600
Subject: [PATCH 1/7] chore: scaffold for day 2 puzzle
---
.../CubeConundrum.Tests.csproj | 30 +++++++++++++++++++
02/CubeConundrum.Tests/GlobalUsings.cs | 1 +
02/CubeConundrum.Tests/UnitTest1.cs | 10 +++++++
02/CubeConundrum/CubeConundrum.csproj | 10 +++++++
02/CubeConundrum/Program.cs | 2 ++
AdventOfCode2023.sln | 16 ++++++++++
6 files changed, 69 insertions(+)
create mode 100644 02/CubeConundrum.Tests/CubeConundrum.Tests.csproj
create mode 100644 02/CubeConundrum.Tests/GlobalUsings.cs
create mode 100644 02/CubeConundrum.Tests/UnitTest1.cs
create mode 100644 02/CubeConundrum/CubeConundrum.csproj
create mode 100644 02/CubeConundrum/Program.cs
diff --git a/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj b/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj
new file mode 100644
index 0000000..2346b86
--- /dev/null
+++ b/02/CubeConundrum.Tests/CubeConundrum.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/02/CubeConundrum.Tests/GlobalUsings.cs b/02/CubeConundrum.Tests/GlobalUsings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/02/CubeConundrum.Tests/GlobalUsings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file
diff --git a/02/CubeConundrum.Tests/UnitTest1.cs b/02/CubeConundrum.Tests/UnitTest1.cs
new file mode 100644
index 0000000..d26506e
--- /dev/null
+++ b/02/CubeConundrum.Tests/UnitTest1.cs
@@ -0,0 +1,10 @@
+namespace CubeConundrum.Tests;
+
+public class UnitTest1
+{
+ [Fact]
+ public void Test1()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/02/CubeConundrum/CubeConundrum.csproj b/02/CubeConundrum/CubeConundrum.csproj
new file mode 100644
index 0000000..2150e37
--- /dev/null
+++ b/02/CubeConundrum/CubeConundrum.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/02/CubeConundrum/Program.cs b/02/CubeConundrum/Program.cs
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ b/02/CubeConundrum/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 f97fe91..f685422 100644
--- a/AdventOfCode2023.sln
+++ b/AdventOfCode2023.sln
@@ -9,6 +9,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trebuchet", "01\Trebuchet\T
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trebuchet.Tests", "01\Trebuchet.Tests\Trebuchet.Tests.csproj", "{4A5226E4-5B90-4D6C-9224-EBE3F04470ED}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02", "02", "{4FD81B09-302F-4C76-BECB-B4559DF3984F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CubeConundrum", "02\CubeConundrum\CubeConundrum.csproj", "{95D6522F-4893-4A66-9B39-7F0268E290B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CubeConundrum.Tests", "02\CubeConundrum.Tests\CubeConundrum.Tests.csproj", "{4825CE42-4717-4DA6-944F-9BD9A825932B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -26,9 +32,19 @@ Global
{4A5226E4-5B90-4D6C-9224-EBE3F04470ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A5226E4-5B90-4D6C-9224-EBE3F04470ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A5226E4-5B90-4D6C-9224-EBE3F04470ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95D6522F-4893-4A66-9B39-7F0268E290B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95D6522F-4893-4A66-9B39-7F0268E290B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95D6522F-4893-4A66-9B39-7F0268E290B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95D6522F-4893-4A66-9B39-7F0268E290B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4825CE42-4717-4DA6-944F-9BD9A825932B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4825CE42-4717-4DA6-944F-9BD9A825932B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4825CE42-4717-4DA6-944F-9BD9A825932B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4825CE42-4717-4DA6-944F-9BD9A825932B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3F8EAC09-4BC7-43AA-B72B-48DDD2710F6D} = {8C29858C-623A-461A-BF0B-254E151CD9C2}
{4A5226E4-5B90-4D6C-9224-EBE3F04470ED} = {8C29858C-623A-461A-BF0B-254E151CD9C2}
+ {95D6522F-4893-4A66-9B39-7F0268E290B8} = {4FD81B09-302F-4C76-BECB-B4559DF3984F}
+ {4825CE42-4717-4DA6-944F-9BD9A825932B} = {4FD81B09-302F-4C76-BECB-B4559DF3984F}
EndGlobalSection
EndGlobal
From 8cc9c4b3225aa134a7e1d5d95021be93578b77b4 Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sat, 2 Dec 2023 09:32:24 -0600
Subject: [PATCH 2/7] docs: update README.md
---
README.md | 54 +++++++++++++++++++++++++++---------------------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/README.md b/README.md
index d66662c..8ee50d1 100644
--- a/README.md
+++ b/README.md
@@ -4,30 +4,30 @@ This repository contains my solutions for the [Advent of Code 2023](https://adve
## Challenges
-| Day | Problem | Solution | Status | Notes |
-| --- | -------------------------- | :-----------------------------------: | :----------------------: | ------------------------------------------------------------------- |
-| 01 | [Problem](./01/PROBLEM.md) | [Solution](./01/Trebuchet/Program.cs) | :white_check_mark: | The trickiest part here was accounting for overlapping digit words. |
-| 02 | [Problem](./02/PROBLEM.md) | [Solution](./02/) | :hourglass_flowing_sand: |
-| 03 | [Problem](./03/PROBLEM.md) | [Solution](./03/) | :hourglass_flowing_sand: |
-| 04 | [Problem](./04/PROBLEM.md) | [Solution](./04/) | :hourglass_flowing_sand: |
-| 05 | [Problem](./05/PROBLEM.md) | [Solution](./05/) | :hourglass_flowing_sand: |
-| 06 | [Problem](./06/PROBLEM.md) | [Solution](./06/) | :hourglass_flowing_sand: |
-| 07 | [Problem](./07/PROBLEM.md) | [Solution](./07/) | :hourglass_flowing_sand: |
-| 08 | [Problem](./08/PROBLEM.md) | [Solution](./08/) | :hourglass_flowing_sand: |
-| 09 | [Problem](./09/PROBLEM.md) | [Solution](./09/) | :hourglass_flowing_sand: |
-| 10 | [Problem](./10/PROBLEM.md) | [Solution](./10/) | :hourglass_flowing_sand: |
-| 11 | [Problem](./11/PROBLEM.md) | [Solution](./11/) | :hourglass_flowing_sand: |
-| 12 | [Problem](./12/PROBLEM.md) | [Solution](./12/) | :hourglass_flowing_sand: |
-| 13 | [Problem](./13/PROBLEM.md) | [Solution](./13/) | :hourglass_flowing_sand: |
-| 14 | [Problem](./14/PROBLEM.md) | [Solution](./14/) | :hourglass_flowing_sand: |
-| 15 | [Problem](./15/PROBLEM.md) | [Solution](./15/) | :hourglass_flowing_sand: |
-| 16 | [Problem](./16/PROBLEM.md) | [Solution](./16/) | :hourglass_flowing_sand: |
-| 17 | [Problem](./17/PROBLEM.md) | [Solution](./17/) | :hourglass_flowing_sand: |
-| 18 | [Problem](./18/PROBLEM.md) | [Solution](./18/) | :hourglass_flowing_sand: |
-| 19 | [Problem](./19/PROBLEM.md) | [Solution](./19/) | :hourglass_flowing_sand: |
-| 20 | [Problem](./20/PROBLEM.md) | [Solution](./20/) | :hourglass_flowing_sand: |
-| 21 | [Problem](./21/PROBLEM.md) | [Solution](./21/) | :hourglass_flowing_sand: |
-| 22 | [Problem](./22/PROBLEM.md) | [Solution](./22/) | :hourglass_flowing_sand: |
-| 23 | [Problem](./23/PROBLEM.md) | [Solution](./23/) | :hourglass_flowing_sand: |
-| 24 | [Problem](./24/PROBLEM.md) | [Solution](./24/) | :hourglass_flowing_sand: |
-| 25 | [Problem](./25/PROBLEM.md) | [Solution](./25/) | :hourglass_flowing_sand: |
+| Day | Problem | Solution | Status | Notes |
+| --- | -------------------------- | :---------------------------------------: | :----------------------: | ------------------------------------------------------------------- |
+| 01 | [Problem](./01/PROBLEM.md) | [Solution](./01/Trebuchet/Program.cs) | :white_check_mark: | The trickiest part here was accounting for overlapping digit words. |
+| 02 | [Problem](./02/PROBLEM.md) | [Solution](./02/CubeConundrum/Program.cs) | :hourglass_flowing_sand: |
+| 03 | [Problem](./03/PROBLEM.md) | [Solution](./03/) | :hourglass_flowing_sand: |
+| 04 | [Problem](./04/PROBLEM.md) | [Solution](./04/) | :hourglass_flowing_sand: |
+| 05 | [Problem](./05/PROBLEM.md) | [Solution](./05/) | :hourglass_flowing_sand: |
+| 06 | [Problem](./06/PROBLEM.md) | [Solution](./06/) | :hourglass_flowing_sand: |
+| 07 | [Problem](./07/PROBLEM.md) | [Solution](./07/) | :hourglass_flowing_sand: |
+| 08 | [Problem](./08/PROBLEM.md) | [Solution](./08/) | :hourglass_flowing_sand: |
+| 09 | [Problem](./09/PROBLEM.md) | [Solution](./09/) | :hourglass_flowing_sand: |
+| 10 | [Problem](./10/PROBLEM.md) | [Solution](./10/) | :hourglass_flowing_sand: |
+| 11 | [Problem](./11/PROBLEM.md) | [Solution](./11/) | :hourglass_flowing_sand: |
+| 12 | [Problem](./12/PROBLEM.md) | [Solution](./12/) | :hourglass_flowing_sand: |
+| 13 | [Problem](./13/PROBLEM.md) | [Solution](./13/) | :hourglass_flowing_sand: |
+| 14 | [Problem](./14/PROBLEM.md) | [Solution](./14/) | :hourglass_flowing_sand: |
+| 15 | [Problem](./15/PROBLEM.md) | [Solution](./15/) | :hourglass_flowing_sand: |
+| 16 | [Problem](./16/PROBLEM.md) | [Solution](./16/) | :hourglass_flowing_sand: |
+| 17 | [Problem](./17/PROBLEM.md) | [Solution](./17/) | :hourglass_flowing_sand: |
+| 18 | [Problem](./18/PROBLEM.md) | [Solution](./18/) | :hourglass_flowing_sand: |
+| 19 | [Problem](./19/PROBLEM.md) | [Solution](./19/) | :hourglass_flowing_sand: |
+| 20 | [Problem](./20/PROBLEM.md) | [Solution](./20/) | :hourglass_flowing_sand: |
+| 21 | [Problem](./21/PROBLEM.md) | [Solution](./21/) | :hourglass_flowing_sand: |
+| 22 | [Problem](./22/PROBLEM.md) | [Solution](./22/) | :hourglass_flowing_sand: |
+| 23 | [Problem](./23/PROBLEM.md) | [Solution](./23/) | :hourglass_flowing_sand: |
+| 24 | [Problem](./24/PROBLEM.md) | [Solution](./24/) | :hourglass_flowing_sand: |
+| 25 | [Problem](./25/PROBLEM.md) | [Solution](./25/) | :hourglass_flowing_sand: |
From dc8bd473b99c9f32c8bb1019b6e24495eda461d8 Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Sat, 2 Dec 2023 10:41:00 -0600
Subject: [PATCH 3/7] feat: create parser to parse game into model
---
.../PartTwoPuzzleSolverTests.cs | 2 +-
02/CubeConundrum.Tests/GlobalUsings.cs | 3 +-
02/CubeConundrum.Tests/PuzzleParserTests.cs | 94 +++++++++++++++++++
02/CubeConundrum.Tests/UnitTest1.cs | 10 --
02/CubeConundrum/Program.cs | 87 ++++++++++++++++-
02/SCRATCH.md | 75 +++++++++++++++
README.md | 54 +++++------
7 files changed, 284 insertions(+), 41 deletions(-)
create mode 100644 02/CubeConundrum.Tests/PuzzleParserTests.cs
delete mode 100644 02/CubeConundrum.Tests/UnitTest1.cs
create mode 100644 02/SCRATCH.md
diff --git a/01/Trebuchet.Tests/PartTwoPuzzleSolverTests.cs b/01/Trebuchet.Tests/PartTwoPuzzleSolverTests.cs
index 3854d4f..3e7cd26 100644
--- a/01/Trebuchet.Tests/PartTwoPuzzleSolverTests.cs
+++ b/01/Trebuchet.Tests/PartTwoPuzzleSolverTests.cs
@@ -36,6 +36,6 @@ public class PartTwoPuzzleSolverTests
{
var input = await File.ReadAllLinesAsync("INPUT.txt");
var result = _sut.SumCalibrationValues(input);
- result.Should().BeLessThan(54249);
+ result.Should().Be(54249);
}
}
\ No newline at end of file
diff --git a/02/CubeConundrum.Tests/GlobalUsings.cs b/02/CubeConundrum.Tests/GlobalUsings.cs
index 8c927eb..7fef4b0 100644
--- a/02/CubeConundrum.Tests/GlobalUsings.cs
+++ b/02/CubeConundrum.Tests/GlobalUsings.cs
@@ -1 +1,2 @@
-global using Xunit;
\ No newline at end of file
+global using Xunit;
+global using FluentAssertions;
\ No newline at end of file
diff --git a/02/CubeConundrum.Tests/PuzzleParserTests.cs b/02/CubeConundrum.Tests/PuzzleParserTests.cs
new file mode 100644
index 0000000..22bdd05
--- /dev/null
+++ b/02/CubeConundrum.Tests/PuzzleParserTests.cs
@@ -0,0 +1,94 @@
+namespace CubeConundrum.Tests;
+
+public class PuzzleParserTests
+{
+ private readonly PuzzleParser _sut = new();
+
+ [Theory, MemberData(nameof(TestData.CubeStrings), MemberType = typeof(TestData))]
+ public void ParseCube_GivenAStringThatRepresentsACube_ItShouldReturnTheEquivalentCubeModel(string input, Cube expected)
+ {
+ var result = _sut.ParseCube(input);
+ result.Should().BeEquivalentTo(expected);
+ }
+
+ [Theory, MemberData(nameof(TestData.ResultStrings), MemberType = typeof(TestData))]
+ public void ParseResult_GivenAStringThatRepresentsAResult_ItShouldReturnTheEquivalentResultModel(string input, Result expected)
+ {
+ var result = _sut.ParseResult(input);
+ result.Should().BeEquivalentTo(expected);
+ }
+
+ [Theory, MemberData(nameof(TestData.GameStrings), MemberType = typeof(TestData))]
+ public void ParseGame_GivenAStringThatRepresentsAGame_ItShouldReturnTheEquivalentGameModel(string input, Game expected)
+ {
+ var result = _sut.ParseGame(input);
+ result.Should().BeEquivalentTo(expected);
+ }
+}
+
+public static class TestData
+{
+ public static readonly IEnumerable