diff --git a/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj b/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj
index 2346b86..26a27fd 100644
--- a/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj
+++ b/02/CubeConundrum.Tests/CubeConundrum.Tests.csproj
@@ -27,4 +27,10 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/02/CubeConundrum.Tests/ProgramTests.cs b/02/CubeConundrum.Tests/ProgramTests.cs
new file mode 100644
index 0000000..5148b3d
--- /dev/null
+++ b/02/CubeConundrum.Tests/ProgramTests.cs
@@ -0,0 +1,11 @@
+namespace CubeConundrum.Tests;
+
+public class ProgramTests
+{
+ [Fact]
+ public async Task Main_GivenInput_ItShouldReturnExpectedSum()
+ {
+ var result = await Program.Main(["INPUT.txt"]);
+ result.Should().Be(2879);
+ }
+}
\ No newline at end of file
diff --git a/02/CubeConundrum/Program.cs b/02/CubeConundrum/Program.cs
index 4b32802..b1d5b08 100644
--- a/02/CubeConundrum/Program.cs
+++ b/02/CubeConundrum/Program.cs
@@ -4,7 +4,28 @@ public class Program
{
public async static Task Main(string[] args)
{
- return await Task.FromResult(0);
+ if (args.Length is 0)
+ {
+ Console.WriteLine("Please provide a path to the input file.");
+ return 1;
+ }
+
+ if (File.Exists(args[0]) is false)
+ {
+ Console.WriteLine("The provided file does not exist.");
+ return 2;
+ }
+
+ var puzzleParser = new PuzzleParser();
+ var puzzleSolver = new PartOnePuzzleSolver();
+
+ var input = await File.ReadAllLinesAsync(args[0]);
+ var games = input.Select(puzzleParser.ParseGame);
+ var result = puzzleSolver.SumPossibleGameIds(games);
+
+ Console.WriteLine($"The sum of all possible game ids is {result}.");
+
+ return result;
}
}