diff --git a/.gitignore b/.gitignore
index e257658..cad4563 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,7 @@
*.out
*.app
+# VS and Output
+.vs
+Debug/
+*.vcxproj.user
\ No newline at end of file
diff --git a/AdventOfCode2024/AdventOfCode2024.cpp b/AdventOfCode2024/AdventOfCode2024.cpp
new file mode 100644
index 0000000..010d4a1
--- /dev/null
+++ b/AdventOfCode2024/AdventOfCode2024.cpp
@@ -0,0 +1,23 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#include "Program.h"
+
+int main()
+{
+ Program program;
+ program.run();
+ return 0;
+}
\ No newline at end of file
diff --git a/AdventOfCode2024/AdventOfCode2024.sln b/AdventOfCode2024/AdventOfCode2024.sln
new file mode 100644
index 0000000..ff8d565
--- /dev/null
+++ b/AdventOfCode2024/AdventOfCode2024.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.7.34221.43
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AdventOfCode2024", "AdventOfCode2024.vcxproj", "{0DEDB176-15A1-48C2-B710-5F17538C5DEC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests", "UnitTests\UnitTests.vcxproj", "{15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Debug|x64.ActiveCfg = Debug|x64
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Debug|x64.Build.0 = Debug|x64
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Debug|x86.ActiveCfg = Debug|Win32
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Debug|x86.Build.0 = Debug|Win32
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Release|x64.ActiveCfg = Release|x64
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Release|x64.Build.0 = Release|x64
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Release|x86.ActiveCfg = Release|Win32
+ {0DEDB176-15A1-48C2-B710-5F17538C5DEC}.Release|x86.Build.0 = Release|Win32
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Debug|x64.ActiveCfg = Debug|x64
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Debug|x64.Build.0 = Debug|x64
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Debug|x86.ActiveCfg = Debug|Win32
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Debug|x86.Build.0 = Debug|Win32
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Release|x64.ActiveCfg = Release|x64
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Release|x64.Build.0 = Release|x64
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Release|x86.ActiveCfg = Release|Win32
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {09BCF972-2454-4BE3-9637-D49111238A7F}
+ EndGlobalSection
+EndGlobal
diff --git a/AdventOfCode2024/AdventOfCode2024.vcxproj b/AdventOfCode2024/AdventOfCode2024.vcxproj
new file mode 100644
index 0000000..cbf78e3
--- /dev/null
+++ b/AdventOfCode2024/AdventOfCode2024.vcxproj
@@ -0,0 +1,146 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {0dedb176-15a1-48c2-b710-5f17538c5dec}
+ AdventOfCode2024
+ 10.0
+
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AdventOfCode2024/AdventOfCode2024.vcxproj.filters b/AdventOfCode2024/AdventOfCode2024.vcxproj.filters
new file mode 100644
index 0000000..dc84f48
--- /dev/null
+++ b/AdventOfCode2024/AdventOfCode2024.vcxproj.filters
@@ -0,0 +1,48 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/AdventOfCode2024/Demo.cpp b/AdventOfCode2024/Demo.cpp
new file mode 100644
index 0000000..ac5bbb6
--- /dev/null
+++ b/AdventOfCode2024/Demo.cpp
@@ -0,0 +1,43 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#include "Demo.h"
+
+std::string Demo::getPuzzleName() const
+{
+ return "Demo";
+}
+
+std::string Demo::getInputFileName() const
+{
+ return "demo.txt";
+}
+
+void Demo::processDataLine(const std::string& line)
+{
+ part1 += std::stoi(line);
+ if (part2 == 0)
+ {
+ part2 = std::stoi(line);
+ }
+ else
+ {
+ part2 *= std::stoi(line);
+ }
+}
+
+void Demo::finish()
+{
+}
diff --git a/AdventOfCode2024/Demo.h b/AdventOfCode2024/Demo.h
new file mode 100644
index 0000000..d17ae03
--- /dev/null
+++ b/AdventOfCode2024/Demo.h
@@ -0,0 +1,28 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#pragma once
+
+#include "Solver.h"
+
+class Demo :
+ public Solver
+{
+public:
+ virtual std::string getPuzzleName() const override;
+ virtual std::string getInputFileName() const override;
+ virtual void processDataLine(const std::string& line) override;
+ virtual void finish() override;
+};
diff --git a/AdventOfCode2024/Program.cpp b/AdventOfCode2024/Program.cpp
new file mode 100644
index 0000000..642ad5a
--- /dev/null
+++ b/AdventOfCode2024/Program.cpp
@@ -0,0 +1,38 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#include
+#include
+
+#include "Demo.h"
+#include "Program.h"
+#include "SolverEngine.h"
+
+void Program::run()
+{
+ std::cout << "### Advent of Code 2023 ###\n";
+ runSolvers();
+}
+
+void Program::runSolvers()
+{
+ SolverEngine solverEngine{ getInputPaths() };
+ solverEngine.run(std::make_unique());
+}
+
+std::vector Program::getInputPaths() const
+{
+ return std::vector{ "data", "../../data" };
+}
diff --git a/AdventOfCode2024/Program.h b/AdventOfCode2024/Program.h
new file mode 100644
index 0000000..0d969f7
--- /dev/null
+++ b/AdventOfCode2024/Program.h
@@ -0,0 +1,28 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#pragma once
+
+#include
+#include
+
+class Program
+{
+public:
+ void run();
+private:
+ void runSolvers();
+ std::vector getInputPaths() const;
+};
diff --git a/AdventOfCode2024/Solver.cpp b/AdventOfCode2024/Solver.cpp
new file mode 100644
index 0000000..b788f5e
--- /dev/null
+++ b/AdventOfCode2024/Solver.cpp
@@ -0,0 +1,29 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#include "Solver.h"
+
+Solver::Solver()
+ : part1{ 0 }, part2{ 0 } {}
+
+long long int Solver::getResultPart1() const
+{
+ return part1;
+}
+
+long long int Solver::getResultPart2() const
+{
+ return part2;
+}
diff --git a/AdventOfCode2024/Solver.h b/AdventOfCode2024/Solver.h
new file mode 100644
index 0000000..9e7254c
--- /dev/null
+++ b/AdventOfCode2024/Solver.h
@@ -0,0 +1,34 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#pragma once
+
+#include
+
+class Solver
+{
+public:
+ Solver();
+ virtual ~Solver() {};
+ virtual std::string getPuzzleName() const = 0;
+ virtual std::string getInputFileName() const = 0;
+ virtual void processDataLine(const std::string& line) = 0;
+ virtual void finish() = 0;
+ long long int getResultPart1() const;
+ long long int getResultPart2() const;
+protected:
+ long long int part1;
+ long long int part2;
+};
diff --git a/AdventOfCode2024/SolverEngine.cpp b/AdventOfCode2024/SolverEngine.cpp
new file mode 100644
index 0000000..1940e4f
--- /dev/null
+++ b/AdventOfCode2024/SolverEngine.cpp
@@ -0,0 +1,76 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#include
+#include
+
+#include "SolverEngine.h"
+
+SolverEngine::SolverEngine(const std::vector& inputPaths)
+ : inputPaths_{ inputPaths } {}
+
+void SolverEngine::run(const std::unique_ptr solver)
+{
+ std::cout << "\n--- " << solver->getPuzzleName() << " ---\n";
+
+ auto fullFilePath = tryGetValidFullInputFilePath(solver->getInputFileName());
+ if (fullFilePath != "")
+ {
+ std::string line;
+ std::ifstream inputFile{ fullFilePath };
+ while (std::getline(inputFile, line))
+ {
+ solver->processDataLine(line);
+ }
+ inputFile.close();
+
+ solver->finish();
+
+ std::cout << "Part 1: " << solver->getResultPart1()
+ << "\nPart 2: " << solver->getResultPart2() << std::endl;
+ }
+}
+
+std::filesystem::path SolverEngine::tryGetValidFullInputFilePath(const std::string& inputFileName)
+{
+ for (auto path : inputPaths_)
+ {
+ std::filesystem::path fullFilePath = path;
+ fullFilePath /= inputFileName;
+ if (std::filesystem::exists(fullFilePath))
+ {
+ return fullFilePath;
+ }
+ }
+
+ std::cout << "Cannot find puzzle input file '";
+ for (size_t i = 0; i < inputPaths_.size(); i++)
+ {
+ std::filesystem::path fullFilePath = inputPaths_[i];
+ fullFilePath /= inputFileName;
+ std::cout << std::filesystem::absolute(fullFilePath).string();
+ if (i + 2 < inputPaths_.size())
+ {
+ std::cout << "', '";
+ }
+ else if (i + 1 < inputPaths_.size())
+ {
+ std::cout << "', or '";
+ }
+ }
+ std::cout << "'. Please download the file content from https://adventofcode.com/2024/\n";
+
+ return "";
+}
diff --git a/AdventOfCode2024/SolverEngine.h b/AdventOfCode2024/SolverEngine.h
new file mode 100644
index 0000000..854733a
--- /dev/null
+++ b/AdventOfCode2024/SolverEngine.h
@@ -0,0 +1,33 @@
+// Solutions to the Advent Of Code 2024.
+// Copyright (C) 2024 Stefan Müller
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or (at your option) any later
+// version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program. If not, see .
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+#include "Solver.h"
+
+class SolverEngine
+{
+public:
+ SolverEngine(const std::vector& inputPaths);
+ void run(const std::unique_ptr solver);
+private:
+ std::vector inputPaths_;
+ std::filesystem::path tryGetValidFullInputFilePath(const std::string& inputFileName);
+};
diff --git a/AdventOfCode2024/UnitTests/UnitTests.cpp b/AdventOfCode2024/UnitTests/UnitTests.cpp
new file mode 100644
index 0000000..7c0e4c4
--- /dev/null
+++ b/AdventOfCode2024/UnitTests/UnitTests.cpp
@@ -0,0 +1,22 @@
+#include "pch.h"
+#include "CppUnitTest.h"
+
+using namespace Microsoft::VisualStudio::CppUnitTestFramework;
+
+namespace UnitTests
+{
+ TEST_CLASS(UnitTests)
+ {
+ public:
+
+ TEST_METHOD(TestMethod1)
+ {
+ Assert::Fail();
+ }
+
+ TEST_METHOD(TestMethod2)
+ {
+ Assert::AreEqual(1, 1);
+ }
+ };
+}
diff --git a/AdventOfCode2024/UnitTests/UnitTests.vcxproj b/AdventOfCode2024/UnitTests/UnitTests.vcxproj
new file mode 100644
index 0000000..46d085c
--- /dev/null
+++ b/AdventOfCode2024/UnitTests/UnitTests.vcxproj
@@ -0,0 +1,178 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ {15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}
+ Win32Proj
+ UnitTests
+ 10.0
+ NativeUnitTestProject
+
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+ false
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+ false
+
+
+ DynamicLibrary
+ true
+ v143
+ Unicode
+ false
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ Unicode
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+ Use
+ Level3
+ true
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ _DEBUG;%(PreprocessorDefinitions)
+ true
+ pch.h
+
+
+ Windows
+ $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)
+
+
+
+
+ Use
+ Level3
+ true
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;%(PreprocessorDefinitions)
+ true
+ pch.h
+
+
+ Windows
+ $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)
+
+
+
+
+ Use
+ Level3
+ true
+ true
+ true
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;%(PreprocessorDefinitions)
+ true
+ pch.h
+
+
+ Windows
+ true
+ true
+ $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)
+
+
+
+
+ Use
+ Level3
+ true
+ true
+ true
+ $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ NDEBUG;%(PreprocessorDefinitions)
+ true
+ pch.h
+
+
+ Windows
+ true
+ true
+ $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)
+
+
+
+
+ Create
+ Create
+ Create
+ Create
+
+
+
+
+
+
+
+
+ {0dedb176-15a1-48c2-b710-5f17538c5dec}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters b/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters
new file mode 100644
index 0000000..264bee8
--- /dev/null
+++ b/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters
@@ -0,0 +1,30 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/AdventOfCode2024/UnitTests/pch.cpp b/AdventOfCode2024/UnitTests/pch.cpp
new file mode 100644
index 0000000..64b7eef
--- /dev/null
+++ b/AdventOfCode2024/UnitTests/pch.cpp
@@ -0,0 +1,5 @@
+// pch.cpp: source file corresponding to the pre-compiled header
+
+#include "pch.h"
+
+// When you are using pre-compiled headers, this source file is necessary for compilation to succeed.
diff --git a/AdventOfCode2024/UnitTests/pch.h b/AdventOfCode2024/UnitTests/pch.h
new file mode 100644
index 0000000..9d715b0
--- /dev/null
+++ b/AdventOfCode2024/UnitTests/pch.h
@@ -0,0 +1,12 @@
+// pch.h: This is a precompiled header file.
+// Files listed below are compiled only once, improving build performance for future builds.
+// This also affects IntelliSense performance, including code completion and many code browsing features.
+// However, files listed here are ALL re-compiled if any one of them is updated between builds.
+// Do not add files here that you will be updating frequently as this negates the performance advantage.
+
+#ifndef PCH_H
+#define PCH_H
+
+// add headers that you want to pre-compile here
+
+#endif //PCH_H