diff --git a/03/MullItOver.Tests/MullItOver.Tests.csproj b/03/MullItOver.Tests/MullItOver.Tests.csproj
new file mode 100644
index 0000000..9470216
--- /dev/null
+++ b/03/MullItOver.Tests/MullItOver.Tests.csproj
@@ -0,0 +1,19 @@
+
+
+
+ Exe
+ net9.0
+ enable
+ enable
+ CA1822
+
+
+
+
+
+
+
+
+
+
+
diff --git a/03/MullItOver.Tests/PuzzleParserTests.cs b/03/MullItOver.Tests/PuzzleParserTests.cs
new file mode 100644
index 0000000..60e7e2b
--- /dev/null
+++ b/03/MullItOver.Tests/PuzzleParserTests.cs
@@ -0,0 +1,14 @@
+namespace MullItOver.Tests;
+
+public class PuzzleParserTests
+{
+ private readonly PuzzleParser _parser = new();
+
+ [Test]
+ public async Task Parse_WhenInputIsEmpty_ReturnsEmptyList()
+ {
+ var result = _parser.Parse("");
+
+ await Assert.That(result).IsEquivalentTo(new List());
+ }
+}
\ No newline at end of file
diff --git a/03/MullItOver/MullItOver.csproj b/03/MullItOver/MullItOver.csproj
new file mode 100644
index 0000000..7678791
--- /dev/null
+++ b/03/MullItOver/MullItOver.csproj
@@ -0,0 +1,21 @@
+
+
+
+ Exe
+ net9.0
+ enable
+ enable
+ CA1822
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/03/MullItOver/Program.cs b/03/MullItOver/Program.cs
new file mode 100644
index 0000000..1c97516
--- /dev/null
+++ b/03/MullItOver/Program.cs
@@ -0,0 +1,38 @@
+using System.Diagnostics;
+
+if (args.Length is 0)
+{
+ Console.WriteLine("Please provide a path to the input file.");
+ return;
+}
+
+if (File.Exists(args[0]) is false)
+{
+ Console.WriteLine("The provided file does not exist.");
+ return;
+}
+
+var isPart2 = args.Length is 2 && args[1] is "part2";
+var input = await File.ReadAllTextAsync(args[0]);
+
+var stopwatch = new Stopwatch();
+stopwatch.Start();
+
+var instructions = new PuzzleParser().Parse(input);
+
+var results = 0;
+
+stopwatch.Stop();
+Console.WriteLine($"The sum of instructions is {results}. ({stopwatch.ElapsedMilliseconds}ms)");
+
+class PuzzleParser
+{
+ public List Parse(string input)
+ {
+ return [];
+ }
+}
+
+class Instruction(int multiplicandOne, int multiplicandTwo)
+{
+}
\ No newline at end of file
diff --git a/AdventOfCode2024.sln b/AdventOfCode2024.sln
index 9fbd111..b8fad3c 100644
--- a/AdventOfCode2024.sln
+++ b/AdventOfCode2024.sln
@@ -15,6 +15,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedNosedReports", "02\RedNo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedNosedReports.Tests", "02\RedNosedReports.Tests\RedNosedReports.Tests.csproj", "{8275EA3C-B88A-4719-866C-A5B49BD6B74E}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03", "03", "{D4B938F3-3B4A-4020-BDD5-6F1A55063F83}"
+ ProjectSection(SolutionItems) = preProject
+ 03\INPUT.txt = 03\INPUT.txt
+ 03\PROBLEM.md = 03\PROBLEM.md
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MullItOver.Tests", "03\MullItOver.Tests\MullItOver.Tests.csproj", "{1705CBAF-D90F-4303-932B-3AA65AC7A06B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MullItOver", "03\MullItOver\MullItOver.csproj", "{B0F3B761-E902-4853-85D0-E4DACABBBD2B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -40,11 +50,21 @@ Global
{8275EA3C-B88A-4719-866C-A5B49BD6B74E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8275EA3C-B88A-4719-866C-A5B49BD6B74E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8275EA3C-B88A-4719-866C-A5B49BD6B74E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1705CBAF-D90F-4303-932B-3AA65AC7A06B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1705CBAF-D90F-4303-932B-3AA65AC7A06B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1705CBAF-D90F-4303-932B-3AA65AC7A06B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1705CBAF-D90F-4303-932B-3AA65AC7A06B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B0F3B761-E902-4853-85D0-E4DACABBBD2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0F3B761-E902-4853-85D0-E4DACABBBD2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0F3B761-E902-4853-85D0-E4DACABBBD2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0F3B761-E902-4853-85D0-E4DACABBBD2B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{1AFE2FF1-A55D-4D86-A9BB-9875CA0D14D8} = {270B7829-6D23-4B34-91FE-D87D533AF2AB}
{60DB12DB-3F63-4D9E-BA5A-ACEE0C9E1D05} = {270B7829-6D23-4B34-91FE-D87D533AF2AB}
{C2904CE1-B31B-47E4-B1A3-E2EC30731179} = {F73AFAD4-FBCE-4A39-B69E-CDA1B3921902}
{8275EA3C-B88A-4719-866C-A5B49BD6B74E} = {F73AFAD4-FBCE-4A39-B69E-CDA1B3921902}
+ {1705CBAF-D90F-4303-932B-3AA65AC7A06B} = {D4B938F3-3B4A-4020-BDD5-6F1A55063F83}
+ {B0F3B761-E902-4853-85D0-E4DACABBBD2B} = {D4B938F3-3B4A-4020-BDD5-6F1A55063F83}
EndGlobalSection
EndGlobal