diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..afa59c0 --- /dev/null +++ b/.clang-format @@ -0,0 +1,31 @@ +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html +Language: Cpp +BasedOnStyle: LLVM +AccessModifierOffset: -4 +BreakBeforeBraces: Allman +BreakBeforeTernaryOperators: true +ColumnLimit: 100 +EmptyLineBeforeAccessModifier: Never +FixNamespaceComments: false +IncludeBlocks: Regroup +IncludeCategories: + - Regex: "^<[a-z]*>" + Priority: 1 + - Regex: "^<.*/.*>" + Priority: 2 + - Regex: '^<.*\.hpp>' + Priority: 3 + - Regex: '^<.*\.h>' + Priority: 4 + - Regex: ".*" + Priority: 5 +IndentCaseLabels: true +IndentPPDirectives: BeforeHash +IndentWidth: 4 +InsertNewlineAtEOF: true +NamespaceIndentation: All +PointerAlignment: Left +ReferenceAlignment: Left +SortIncludes: CaseInsensitive +SpaceBeforeCaseColon: true +SpaceBeforeParens: ControlStatements diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..3927b91 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,30 @@ +--- +# Enable all by default, then disable some that have either too many warnings +# at the moment or ones that don't make sense for our codebase +Checks: clang-diagnostic-* + clang-analyzer-* + cppcoreguidelines-* + modernize-* + hicpp-* + -hicpp-special-member-functions + -modernize-pass-by-value + -cppcoreguidelines-pro-bounds-constant-array-index + -modernize-use-trailing-return-type + -cppcoreguidelines-avoid-non-const-global-variables + -hicpp-signed-bitwise + -hicpp-vararg + -hicpp-braces-around-statements + -hicpp-no-array-decay + -cppcoreguidelines-pro-bounds-pointer-arithmetic + -cppcoreguidelines-non-private-member-variables-in-classes + -cppcoreguidelines-avoid-magic-numbers + -cppcoreguidelines-pro-type-vararg + -modernize-avoid-c-arrays + -cppcoreguidelines-avoid-c-arrays + -cppcoreguidelines-pro-bounds-array-to-pointer-decay + -cppcoreguidelines-narrowing-conversions + -clang-analyzer-deadcode.DeadStores +WarningsAsErrors: '*' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +... diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c4e98c0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,37 @@ +# Sources +*.c text diff=cpp +*.cc text diff=cpp +*.cxx text diff=cpp +*.cpp text diff=cpp +*.cpi text diff=cpp +*.c++ text diff=cpp +*.hpp text diff=cpp +*.h text diff=cpp +*.h++ text diff=cpp +*.hh text diff=cpp + +# Compiled Object files +*.slo binary +*.lo binary +*.o binary +*.obj binary + +# Precompiled Headers +*.gch binary +*.pch binary + +# Compiled Dynamic libraries +*.so binary +*.dylib binary +*.dll binary + +# Compiled Static libraries +*.lai binary +*.la binary +*.a binary +*.lib binary + +# Executables +*.exe binary +*.out binary +*.app binary diff --git a/.gitignore b/.gitignore index cad4563..f28f810 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ # VS and Output .vs Debug/ -*.vcxproj.user \ No newline at end of file +*.vcxproj.user +build/ \ No newline at end of file diff --git a/AdventOfCode2024/AdventOfCode2024.cpp b/AdventOfCode2024.cpp similarity index 92% rename from AdventOfCode2024/AdventOfCode2024.cpp rename to AdventOfCode2024.cpp index 010d4a1..3600603 100644 --- a/AdventOfCode2024/AdventOfCode2024.cpp +++ b/AdventOfCode2024.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,11 +13,11 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "Program.h" +#include <aoc/Program.h> int main() { Program program; program.run(); return 0; -} \ No newline at end of file +} diff --git a/AdventOfCode2024/.editorconfig b/AdventOfCode2024/.editorconfig deleted file mode 100644 index c031793..0000000 --- a/AdventOfCode2024/.editorconfig +++ /dev/null @@ -1,82 +0,0 @@ -# Visual Studio generated .editorconfig file with C++ settings. -root = true - -[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}] - -# Visual C++ Code Style settings - -cpp_generate_documentation_comments = xml - -# Visual C++ Formatting settings - -cpp_indent_braces = false -cpp_indent_multi_line_relative_to = innermost_parenthesis -cpp_indent_within_parentheses = indent -cpp_indent_preserve_within_parentheses = true -cpp_indent_case_contents = true -cpp_indent_case_labels = true -cpp_indent_case_contents_when_block = false -cpp_indent_lambda_braces_when_parameter = true -cpp_indent_goto_labels = one_left -cpp_indent_preprocessor = leftmost_column -cpp_indent_access_specifiers = false -cpp_indent_namespace_contents = true -cpp_indent_preserve_comments = false -cpp_new_line_before_open_brace_namespace = ignore -cpp_new_line_before_open_brace_type = ignore -cpp_new_line_before_open_brace_function = ignore -cpp_new_line_before_open_brace_block = ignore -cpp_new_line_before_open_brace_lambda = ignore -cpp_new_line_scope_braces_on_separate_lines = false -cpp_new_line_close_brace_same_line_empty_type = false -cpp_new_line_close_brace_same_line_empty_function = false -cpp_new_line_before_catch = true -cpp_new_line_before_else = true -cpp_new_line_before_while_in_do_while = false -cpp_space_before_function_open_parenthesis = remove -cpp_space_within_parameter_list_parentheses = false -cpp_space_between_empty_parameter_list_parentheses = false -cpp_space_after_keywords_in_control_flow_statements = true -cpp_space_within_control_flow_statement_parentheses = false -cpp_space_before_lambda_open_parenthesis = false -cpp_space_within_cast_parentheses = false -cpp_space_after_cast_close_parenthesis = false -cpp_space_within_expression_parentheses = false -cpp_space_before_block_open_brace = true -cpp_space_between_empty_braces = false -cpp_space_before_initializer_list_open_brace = false -cpp_space_within_initializer_list_braces = true -cpp_space_preserve_in_initializer_list = true -cpp_space_before_open_square_bracket = false -cpp_space_within_square_brackets = false -cpp_space_before_empty_square_brackets = false -cpp_space_between_empty_square_brackets = false -cpp_space_group_square_brackets = true -cpp_space_within_lambda_brackets = false -cpp_space_between_empty_lambda_brackets = false -cpp_space_before_comma = false -cpp_space_after_comma = true -cpp_space_remove_around_member_operators = true -cpp_space_before_inheritance_colon = true -cpp_space_before_constructor_colon = true -cpp_space_remove_before_semicolon = true -cpp_space_after_semicolon = true -cpp_space_remove_around_unary_operator = true -cpp_space_around_binary_operator = insert -cpp_space_around_assignment_operator = insert -cpp_space_pointer_reference_alignment = left -cpp_space_around_ternary_operator = insert -cpp_use_unreal_engine_macro_formatting = true -cpp_wrap_preserve_blocks = one_liners - -# Visual C++ Inlcude Cleanup settings - -cpp_include_cleanup_add_missing_error_tag_type = suggestion -cpp_include_cleanup_remove_unused_error_tag_type = dimmed -cpp_include_cleanup_optimize_unused_error_tag_type = suggestion -cpp_include_cleanup_sort_after_edits = false -cpp_sort_includes_error_tag_type = none -cpp_sort_includes_priority_case_sensitive = false -cpp_sort_includes_priority_style = quoted -cpp_includes_style = default -cpp_includes_use_forward_slash = true diff --git a/AdventOfCode2024/AdventOfCode2024.sln b/AdventOfCode2024/AdventOfCode2024.sln deleted file mode 100644 index ff8d565..0000000 --- a/AdventOfCode2024/AdventOfCode2024.sln +++ /dev/null @@ -1,41 +0,0 @@ - -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 deleted file mode 100644 index 35bfe34..0000000 --- a/AdventOfCode2024/AdventOfCode2024.vcxproj +++ /dev/null @@ -1,182 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>17.0</VCProjectVersion> - <Keyword>Win32Proj</Keyword> - <ProjectGuid>{0dedb176-15a1-48c2-b710-5f17538c5dec}</ProjectGuid> - <RootNamespace>AdventOfCode2024</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <ConformanceMode>true</ConformanceMode> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="AdventOfCode2024.cpp" /> - <ClCompile Include="CeresSearch.cpp" /> - <ClCompile Include="GuardGallivant.cpp" /> - <ClCompile Include="HistorianHysteria.cpp" /> - <ClCompile Include="LinesSolver.cpp" /> - <ClCompile Include="MullDataState.cpp" /> - <ClCompile Include="MullToggleCloseState.cpp" /> - <ClCompile Include="MullDoOpenState.cpp" /> - <ClCompile Include="MullEntryState.cpp" /> - <ClCompile Include="MullData.cpp" /> - <ClCompile Include="MullFactorState.cpp" /> - <ClCompile Include="MullItOver.cpp" /> - <ClCompile Include="MullStates.cpp" /> - <ClCompile Include="MullCharState.cpp" /> - <ClCompile Include="Point2.cpp" /> - <ClCompile Include="PrintQueue.cpp" /> - <ClCompile Include="Program.cpp" /> - <ClCompile Include="RedNosedReports.cpp" /> - <ClCompile Include="Solver.cpp" /> - <ClCompile Include="SolverEngine.cpp" /> - <ClCompile Include="StringState.cpp" /> - <ClCompile Include="StringStateMachine.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="CeresSearch.h" /> - <ClInclude Include="GuardGallivant.h" /> - <ClInclude Include="HistorianHysteria.h" /> - <ClInclude Include="LinesSolver.h" /> - <ClInclude Include="MullDataState.h" /> - <ClInclude Include="MullToggleCloseState.h" /> - <ClInclude Include="MullDoOpenState.h" /> - <ClInclude Include="MullEntryState.h" /> - <ClInclude Include="MullData.h" /> - <ClInclude Include="MullFactorState.h" /> - <ClInclude Include="MullItOver.h" /> - <ClInclude Include="MullStates.h" /> - <ClInclude Include="MullCharState.h" /> - <ClInclude Include="Point2.h" /> - <ClInclude Include="PrintQueue.h" /> - <ClInclude Include="Program.h" /> - <ClInclude Include="RedNosedReportData.h" /> - <ClInclude Include="RedNosedReports.h" /> - <ClInclude Include="Slope.h" /> - <ClInclude Include="Solver.h" /> - <ClInclude Include="SolverEngine.h" /> - <ClInclude Include="StringState.h" /> - <ClInclude Include="StringStateMachine.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file diff --git a/AdventOfCode2024/AdventOfCode2024.vcxproj.filters b/AdventOfCode2024/AdventOfCode2024.vcxproj.filters deleted file mode 100644 index feac5aa..0000000 --- a/AdventOfCode2024/AdventOfCode2024.vcxproj.filters +++ /dev/null @@ -1,156 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="AdventOfCode2024.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Solver.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="SolverEngine.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Program.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="HistorianHysteria.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="RedNosedReports.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullItOver.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="StringStateMachine.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="StringState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullEntryState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullData.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullCharState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullFactorState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullDoOpenState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullToggleCloseState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullDataState.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="MullStates.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Point2.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="CeresSearch.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="LinesSolver.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="PrintQueue.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="GuardGallivant.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="SolverEngine.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Solver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Program.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="HistorianHysteria.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="RedNosedReports.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullItOver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="StringStateMachine.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="StringState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullEntryState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullData.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullCharState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullFactorState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullDoOpenState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullToggleCloseState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="RedNosedReportData.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Slope.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullStates.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="MullDataState.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Point2.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="CeresSearch.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="LinesSolver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="PrintQueue.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="GuardGallivant.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> -</Project> \ No newline at end of file diff --git a/AdventOfCode2024/StringState.cpp b/AdventOfCode2024/StringState.cpp deleted file mode 100644 index 8c5d227..0000000 --- a/AdventOfCode2024/StringState.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "StringState.h" diff --git a/AdventOfCode2024/UnitTests/UnitTests.cpp b/AdventOfCode2024/UnitTests/UnitTests.cpp deleted file mode 100644 index d65336a..0000000 --- a/AdventOfCode2024/UnitTests/UnitTests.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// 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 <http://www.gnu.org/licenses/>. - -#include "pch.h" -#include "CppUnitTest.h" - -#include "Part1TestContext.h" -#include "Part2TestContext.h" -#include "../Solver.h" -#include "../SolverEngine.h" - -#include "../HistorianHysteria.h" - -using namespace Microsoft::VisualStudio::CppUnitTestFramework; - -namespace UnitTests -{ - TEST_CLASS(HistorianHysteriaTests) - { - public: - TEST_METHOD(FullData1) - { - runTest(*std::make_unique<HistorianHysteria>(), 2176849, part1TestContext_); - } - - TEST_METHOD(FullData2) - { - runTest(*std::make_unique<HistorianHysteria>(), 23384288, part2TestContext_); - } - - TEST_METHOD(ExampleData1) - { - runTest(*std::make_unique<HistorianHysteria>(), 11, part1ExampleTestContext_); - } - - TEST_METHOD(ExampleData2) - { - runTest(*std::make_unique<HistorianHysteria>(), 31, part2ExampleTestContext_); - } - - private: - Part1TestContext part1TestContext_{ getInputPaths() }; - Part2TestContext part2TestContext_{ getInputPaths() }; - Part1TestContext part1ExampleTestContext_{ getExampleInputPaths() }; - Part2TestContext part2ExampleTestContext_{ getExampleInputPaths() }; - - void runTest(Solver& solver, const long long int expected, const TestContext& context) - { - SolverEngine solverEngine{ context.getInputPaths() }; - solverEngine.run(solver); - assertAreEqual(expected, context.getResult(solver)); - } - - std::vector<std::string> getInputPaths() const - { - return std::vector<std::string>{ "../../data", "../../../../data" }; - } - - std::vector<std::string> getExampleInputPaths() const - { - return std::vector<std::string>{ "../../data/examples", "../../../../data/examples" }; - } - - void assertAreEqual(const long long int expected, const long long int actual) const - { - std::wstring message = L"Expected: <" + std::to_wstring(expected) + L"> Actual: <" + std::to_wstring(actual) + L">"; - Assert::IsTrue(expected == actual, message.c_str()); - } - }; -} diff --git a/AdventOfCode2024/UnitTests/UnitTests.vcxproj b/AdventOfCode2024/UnitTests/UnitTests.vcxproj deleted file mode 100644 index c5dd3f5..0000000 --- a/AdventOfCode2024/UnitTests/UnitTests.vcxproj +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>17.0</VCProjectVersion> - <ProjectGuid>{15C7DA0D-C4D8-420B-AC10-D213AD22B9FA}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>UnitTests</RootNamespace> - <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - <ProjectSubType>NativeUnitTestProject</ProjectSubType> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v143</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <IncludePath>..;$(IncludePath)</IncludePath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - <LanguageStandard>stdcpp17</LanguageStandard> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(SolutionDir)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>Solver.obj;SolverEngine.obj;HistorianHysteria.obj;RedNosedReports.obj;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="Part1TestContext.cpp" /> - <ClCompile Include="Part2TestContext.cpp" /> - <ClCompile Include="pch.cpp"> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> - </ClCompile> - <ClCompile Include="TestContext.cpp" /> - <ClCompile Include="UnitTests.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="Part1TestContext.h" /> - <ClInclude Include="Part2TestContext.h" /> - <ClInclude Include="pch.h" /> - <ClInclude Include="TestContext.h" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\AdventOfCode2024.vcxproj"> - <Project>{0dedb176-15a1-48c2-b710-5f17538c5dec}</Project> - </ProjectReference> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file diff --git a/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters b/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters deleted file mode 100644 index dc63046..0000000 --- a/AdventOfCode2024/UnitTests/UnitTests.vcxproj.filters +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="UnitTests.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="pch.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="TestContext.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Part1TestContext.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Part2TestContext.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="pch.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="TestContext.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Part1TestContext.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Part2TestContext.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> -</Project> \ No newline at end of file diff --git a/AdventOfCode2024/UnitTests/pch.cpp b/AdventOfCode2024/UnitTests/pch.cpp deleted file mode 100644 index 64b7eef..0000000 --- a/AdventOfCode2024/UnitTests/pch.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// 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 deleted file mode 100644 index 9d715b0..0000000 --- a/AdventOfCode2024/UnitTests/pch.h +++ /dev/null @@ -1,12 +0,0 @@ -// 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 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0b8e7ae --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.20 FATAL_ERROR) +Include(FetchContent) + +set(CMAKE_CXX_STANDARD 23) # latest c++ +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# prepare out unit test framework +FetchContent_Declare( + Catch2 + GIT_REPOSITORY https://github.com/catchorg/Catch2.git + GIT_TAG v3.4.0 # or a later release +) +FetchContent_MakeAvailable(Catch2) + +# Versioning +project ("AdventOfCode2024" VERSION 0.0.1 DESCRIPTION "" LANGUAGES CXX) +# --- + +# Grab source files +file(GLOB_RECURSE AdventOfCode2024Sources + "include/*.h" + "include/*.hpp" + "src/*.c" + "src/*.cpp" +) +file(GLOB_RECURSE AdventOfCode2024Tests + "tests/include/*.h" + "tests/include/*.hpp" + "tests/src/*.c" + "tests/src/*.cpp" +) + +# Project setup +set(output_target AdventOfCode2024) + +# This is split in 2 because catch2 generates its own main() functions +# and we don't want to recompile everything twice, so we reuse the lib object. +# lib +# / \ +# main exe catch2 + +# Library to contain logic/code +add_library(${output_target}-lib ${AdventOfCode2024Sources}) +target_include_directories(${output_target}-lib PUBLIC "include") + +# Executable that links to the lib containing the code +add_executable(${output_target} "AdventOfCode2024.cpp") +target_link_libraries(${output_target} PRIVATE ${output_target}-lib) + +# Catch2 linked with the lib. +add_executable(${output_target}-tests ${AdventOfCode2024Tests}) +target_include_directories(${output_target}-tests PRIVATE "tests/include") +target_link_libraries(${output_target}-tests PRIVATE + ${output_target}-lib + Catch2::Catch2WithMain +) diff --git a/README.md b/README.md index a67202d..f5113f2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Solver for Advent of Code 2024 puzzles. <https://adventofcode.com/2024/> -This is a single command line application for the puzzles written in [C++17](https://en.cppreference.com/w/cpp/17) with [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v143). +This is a single command line application for the puzzles written in [C++23](https://en.cppreference.com/w/cpp/23) with CMake. ## Puzzle Input @@ -44,6 +44,10 @@ For this puzzle I added a class for [points in two-dimensional space](AdventOfCo My implementation uses an ordering matrix (a two-dimensional boolean array) to track which page combinations are ordered, and then queries that matrix for each ordered combination of pages in a single line. The same matrix can then also be used for a custom sort function for part 2. +## Thanks + +* [Alexander Brouwer](https://github.com/Bromvlieg) for getting the project set up with CMake. + ## License Copyright (C) 2024 Stefan Müller diff --git a/AdventOfCode2024/CeresSearch.h b/include/aoc/CeresSearch.h similarity index 100% rename from AdventOfCode2024/CeresSearch.h rename to include/aoc/CeresSearch.h diff --git a/AdventOfCode2024/GuardGallivant.h b/include/aoc/GuardGallivant.h similarity index 100% rename from AdventOfCode2024/GuardGallivant.h rename to include/aoc/GuardGallivant.h diff --git a/AdventOfCode2024/HistorianHysteria.h b/include/aoc/HistorianHysteria.h similarity index 90% rename from AdventOfCode2024/HistorianHysteria.h rename to include/aoc/HistorianHysteria.h index 218743e..5c17e9a 100644 --- a/AdventOfCode2024/HistorianHysteria.h +++ b/include/aoc/HistorianHysteria.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -17,10 +17,10 @@ #include <set> -#include "Solver.h" +#include <aoc/Solver.h> -class HistorianHysteria : - public Solver +class HistorianHysteria + : public Solver { public: virtual std::string getPuzzleName() const override; diff --git a/AdventOfCode2024/LinesSolver.h b/include/aoc/LinesSolver.h similarity index 100% rename from AdventOfCode2024/LinesSolver.h rename to include/aoc/LinesSolver.h diff --git a/AdventOfCode2024/MullCharState.h b/include/aoc/MullCharState.h similarity index 90% rename from AdventOfCode2024/MullCharState.h rename to include/aoc/MullCharState.h index 47372e2..9e30ca6 100644 --- a/AdventOfCode2024/MullCharState.h +++ b/include/aoc/MullCharState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "StringState.h" +#include <aoc/StringState.h> -class MullCharState : - public StringState +class MullCharState + : public StringState { public: MullCharState(const char expected); diff --git a/AdventOfCode2024/MullData.h b/include/aoc/MullData.h similarity index 96% rename from AdventOfCode2024/MullData.h rename to include/aoc/MullData.h index 0931b0b..4cdad06 100644 --- a/AdventOfCode2024/MullData.h +++ b/include/aoc/MullData.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 diff --git a/AdventOfCode2024/MullDataState.h b/include/aoc/MullDataState.h similarity index 85% rename from AdventOfCode2024/MullDataState.h rename to include/aoc/MullDataState.h index 2b014e9..7b6d782 100644 --- a/AdventOfCode2024/MullDataState.h +++ b/include/aoc/MullDataState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,11 +15,11 @@ #pragma once -#include "MullData.h" -#include "StringState.h" +#include <aoc/MullData.h> +#include <aoc/StringState.h> -class MullDataState : - public StringState +class MullDataState + : public StringState { public: void setData(MullData& data); diff --git a/AdventOfCode2024/MullDoOpenState.h b/include/aoc/MullDoOpenState.h similarity index 90% rename from AdventOfCode2024/MullDoOpenState.h rename to include/aoc/MullDoOpenState.h index c07dc33..e4d448b 100644 --- a/AdventOfCode2024/MullDoOpenState.h +++ b/include/aoc/MullDoOpenState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "MullDataState.h" +#include <aoc/MullDataState.h> -class MullDoOpenState : - public MullDataState +class MullDoOpenState + : public MullDataState { public: void enter(StringStateMachine* stateMachine) override {}; diff --git a/AdventOfCode2024/MullEntryState.h b/include/aoc/MullEntryState.h similarity index 90% rename from AdventOfCode2024/MullEntryState.h rename to include/aoc/MullEntryState.h index 9e505cc..f6382d4 100644 --- a/AdventOfCode2024/MullEntryState.h +++ b/include/aoc/MullEntryState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "StringState.h" +#include <aoc/StringState.h> -class MullEntryState : - public StringState +class MullEntryState + : public StringState { public: void enter(StringStateMachine* stateMachine) override; diff --git a/AdventOfCode2024/MullFactorState.h b/include/aoc/MullFactorState.h similarity index 90% rename from AdventOfCode2024/MullFactorState.h rename to include/aoc/MullFactorState.h index e30c9d1..790fb99 100644 --- a/AdventOfCode2024/MullFactorState.h +++ b/include/aoc/MullFactorState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "MullDataState.h" +#include <aoc/MullDataState.h> -class MullFactorState : - public MullDataState +class MullFactorState + : public MullDataState { public: MullFactorState(const char expected, const int index); diff --git a/AdventOfCode2024/MullItOver.h b/include/aoc/MullItOver.h similarity index 86% rename from AdventOfCode2024/MullItOver.h rename to include/aoc/MullItOver.h index fff410a..9ef289e 100644 --- a/AdventOfCode2024/MullItOver.h +++ b/include/aoc/MullItOver.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,12 +15,12 @@ #pragma once -#include "MullData.h" -#include "MullStates.h" -#include "Solver.h" +#include <aoc/MullData.h> +#include <aoc/MullStates.h> +#include <aoc/Solver.h> -class MullItOver : - public Solver +class MullItOver + : public Solver { public: MullItOver(); diff --git a/AdventOfCode2024/MullStates.h b/include/aoc/MullStates.h similarity index 86% rename from AdventOfCode2024/MullStates.h rename to include/aoc/MullStates.h index 952ebe1..5c3c26e 100644 --- a/AdventOfCode2024/MullStates.h +++ b/include/aoc/MullStates.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,11 +15,11 @@ #pragma once -#include "MullCharState.h" -#include "MullDoOpenState.h" -#include "MullEntryState.h" -#include "MullFactorState.h" -#include "MullToggleCloseState.h" +#include <aoc/MullCharState.h> +#include <aoc/MullDoOpenState.h> +#include <aoc/MullEntryState.h> +#include <aoc/MullFactorState.h> +#include <aoc/MullToggleCloseState.h> class MullStates { diff --git a/AdventOfCode2024/MullToggleCloseState.h b/include/aoc/MullToggleCloseState.h similarity index 89% rename from AdventOfCode2024/MullToggleCloseState.h rename to include/aoc/MullToggleCloseState.h index 76f0615..401c5b3 100644 --- a/AdventOfCode2024/MullToggleCloseState.h +++ b/include/aoc/MullToggleCloseState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "MullDataState.h" +#include <aoc/MullDataState.h> -class MullToggleCloseState : - public MullDataState +class MullToggleCloseState + : public MullDataState { public: MullToggleCloseState(const bool isEnabler); diff --git a/AdventOfCode2024/Point2.h b/include/aoc/Point2.h similarity index 100% rename from AdventOfCode2024/Point2.h rename to include/aoc/Point2.h diff --git a/AdventOfCode2024/PrintQueue.h b/include/aoc/PrintQueue.h similarity index 100% rename from AdventOfCode2024/PrintQueue.h rename to include/aoc/PrintQueue.h diff --git a/AdventOfCode2024/Program.h b/include/aoc/Program.h similarity index 95% rename from AdventOfCode2024/Program.h rename to include/aoc/Program.h index 0d969f7..cd3708f 100644 --- a/AdventOfCode2024/Program.h +++ b/include/aoc/Program.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 diff --git a/AdventOfCode2024/RedNosedReportData.h b/include/aoc/RedNosedReportData.h similarity index 94% rename from AdventOfCode2024/RedNosedReportData.h rename to include/aoc/RedNosedReportData.h index 1da4240..3a6cffc 100644 --- a/AdventOfCode2024/RedNosedReportData.h +++ b/include/aoc/RedNosedReportData.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -17,7 +17,7 @@ #include<vector> -#include "Slope.h" +#include <aoc/Slope.h> class RedNosedReportData { diff --git a/AdventOfCode2024/RedNosedReports.h b/include/aoc/RedNosedReports.h similarity index 86% rename from AdventOfCode2024/RedNosedReports.h rename to include/aoc/RedNosedReports.h index 3386c7f..b1f1763 100644 --- a/AdventOfCode2024/RedNosedReports.h +++ b/include/aoc/RedNosedReports.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,12 +15,12 @@ #pragma once -#include "Slope.h" -#include "Solver.h" -#include "RedNosedReportData.h" +#include <aoc/Slope.h> +#include <aoc/Solver.h> +#include <aoc/RedNosedReportData.h> -class RedNosedReports : - public Solver +class RedNosedReports + : public Solver { public: std::string getPuzzleName() const override; diff --git a/AdventOfCode2024/Slope.h b/include/aoc/Slope.h similarity index 95% rename from AdventOfCode2024/Slope.h rename to include/aoc/Slope.h index 3aef8e4..045a042 100644 --- a/AdventOfCode2024/Slope.h +++ b/include/aoc/Slope.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 diff --git a/AdventOfCode2024/Solver.h b/include/aoc/Solver.h similarity index 89% rename from AdventOfCode2024/Solver.h rename to include/aoc/Solver.h index 9e7254c..78dc3d6 100644 --- a/AdventOfCode2024/Solver.h +++ b/include/aoc/Solver.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -21,10 +21,10 @@ class Solver { public: Solver(); - virtual ~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 processDataLine(const std::string &line) = 0; virtual void finish() = 0; long long int getResultPart1() const; long long int getResultPart2() const; diff --git a/AdventOfCode2024/SolverEngine.h b/include/aoc/SolverEngine.h similarity index 94% rename from AdventOfCode2024/SolverEngine.h rename to include/aoc/SolverEngine.h index b3a1eaf..ffd751b 100644 --- a/AdventOfCode2024/SolverEngine.h +++ b/include/aoc/SolverEngine.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -20,13 +20,14 @@ #include <memory> #include <vector> -#include "Solver.h" +#include <aoc/Solver.h> class SolverEngine { public: SolverEngine(const std::vector<std::string>& inputPaths); void run(Solver& solver); + private: std::vector<std::string> inputPaths_; std::filesystem::path tryGetValidFullInputFilePath(const std::string& inputFileName); diff --git a/AdventOfCode2024/StringState.h b/include/aoc/StringState.h similarity index 93% rename from AdventOfCode2024/StringState.h rename to include/aoc/StringState.h index 4c88cd3..2f0c9cc 100644 --- a/AdventOfCode2024/StringState.h +++ b/include/aoc/StringState.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -17,7 +17,7 @@ #include <vector> -#include "StringStateMachine.h" +#include <aoc/StringStateMachine.h> class StringStateMachine; diff --git a/AdventOfCode2024/StringStateMachine.h b/include/aoc/StringStateMachine.h similarity index 94% rename from AdventOfCode2024/StringStateMachine.h rename to include/aoc/StringStateMachine.h index b3ddfdd..1324fc0 100644 --- a/AdventOfCode2024/StringStateMachine.h +++ b/include/aoc/StringStateMachine.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -17,7 +17,7 @@ #include <string> -#include "StringState.h" +#include <aoc/StringState.h> class StringState; diff --git a/AdventOfCode2024/CeresSearch.cpp b/src/CeresSearch.cpp similarity index 98% rename from AdventOfCode2024/CeresSearch.cpp rename to src/CeresSearch.cpp index 538dc12..7cbd49d 100644 --- a/AdventOfCode2024/CeresSearch.cpp +++ b/src/CeresSearch.cpp @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "CeresSearch.h" +#include <aoc/CeresSearch.h> std::string CeresSearch::getPuzzleName() const { diff --git a/AdventOfCode2024/GuardGallivant.cpp b/src/GuardGallivant.cpp similarity index 98% rename from AdventOfCode2024/GuardGallivant.cpp rename to src/GuardGallivant.cpp index 55b3f9c..34115c0 100644 --- a/AdventOfCode2024/GuardGallivant.cpp +++ b/src/GuardGallivant.cpp @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "GuardGallivant.h" +#include <aoc/GuardGallivant.h> std::string GuardGallivant::getPuzzleName() const { diff --git a/AdventOfCode2024/HistorianHysteria.cpp b/src/HistorianHysteria.cpp similarity index 96% rename from AdventOfCode2024/HistorianHysteria.cpp rename to src/HistorianHysteria.cpp index 774e334..60d1251 100644 --- a/AdventOfCode2024/HistorianHysteria.cpp +++ b/src/HistorianHysteria.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,7 +15,7 @@ #include <iostream> -#include "HistorianHysteria.h" +#include <aoc/HistorianHysteria.h> std::string HistorianHysteria::getPuzzleName() const { diff --git a/AdventOfCode2024/LinesSolver.cpp b/src/LinesSolver.cpp similarity index 97% rename from AdventOfCode2024/LinesSolver.cpp rename to src/LinesSolver.cpp index 4664b2c..62d2351 100644 --- a/AdventOfCode2024/LinesSolver.cpp +++ b/src/LinesSolver.cpp @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "LinesSolver.h" +#include <aoc/LinesSolver.h> void LinesSolver::processDataLine(const std::string& line) { diff --git a/AdventOfCode2024/MullCharState.cpp b/src/MullCharState.cpp similarity index 94% rename from AdventOfCode2024/MullCharState.cpp rename to src/MullCharState.cpp index b1fa759..9bc86af 100644 --- a/AdventOfCode2024/MullCharState.cpp +++ b/src/MullCharState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullCharState.h" +#include <aoc/MullCharState.h> MullCharState::MullCharState(const char expected) : expected_{ expected }, successState_{}, failState_{} {} diff --git a/AdventOfCode2024/MullData.cpp b/src/MullData.cpp similarity index 95% rename from AdventOfCode2024/MullData.cpp rename to src/MullData.cpp index f5ac367..de04f94 100644 --- a/AdventOfCode2024/MullData.cpp +++ b/src/MullData.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullData.h" +#include <aoc/MullData.h> MullData::MullData() : isEnabled_{ true }, factor1_{ 0 }, factor2_{ 0 }, part1_{ 0 }, part2_{ 0 } {}; diff --git a/AdventOfCode2024/MullDataState.cpp b/src/MullDataState.cpp similarity index 91% rename from AdventOfCode2024/MullDataState.cpp rename to src/MullDataState.cpp index 57a9ca7..488d789 100644 --- a/AdventOfCode2024/MullDataState.cpp +++ b/src/MullDataState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullDataState.h" +#include <aoc/MullDataState.h> void MullDataState::setData(MullData& data) { diff --git a/AdventOfCode2024/MullDoOpenState.cpp b/src/MullDoOpenState.cpp similarity index 94% rename from AdventOfCode2024/MullDoOpenState.cpp rename to src/MullDoOpenState.cpp index 048b759..8c12477 100644 --- a/AdventOfCode2024/MullDoOpenState.cpp +++ b/src/MullDoOpenState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullDoOpenState.h" +#include <aoc/MullDoOpenState.h> void MullDoOpenState::next(StringStateMachine* stateMachine) { diff --git a/AdventOfCode2024/MullEntryState.cpp b/src/MullEntryState.cpp similarity index 94% rename from AdventOfCode2024/MullEntryState.cpp rename to src/MullEntryState.cpp index 5d22315..3d42946 100644 --- a/AdventOfCode2024/MullEntryState.cpp +++ b/src/MullEntryState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullEntryState.h" +#include <aoc/MullEntryState.h> void MullEntryState::enter(StringStateMachine* stateMachine) { diff --git a/AdventOfCode2024/MullFactorState.cpp b/src/MullFactorState.cpp similarity index 96% rename from AdventOfCode2024/MullFactorState.cpp rename to src/MullFactorState.cpp index 3725049..5d63478 100644 --- a/AdventOfCode2024/MullFactorState.cpp +++ b/src/MullFactorState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullFactorState.h" +#include <aoc/MullFactorState.h> MullFactorState::MullFactorState(const char expected, const int index) : expected_{ expected }, index_{ index }, successState_{}, failState_{} {} diff --git a/AdventOfCode2024/MullItOver.cpp b/src/MullItOver.cpp similarity index 92% rename from AdventOfCode2024/MullItOver.cpp rename to src/MullItOver.cpp index a269aa8..a71cb83 100644 --- a/AdventOfCode2024/MullItOver.cpp +++ b/src/MullItOver.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,8 +13,8 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullItOver.h" -#include "StringStateMachine.h" +#include <aoc/MullItOver.h> +#include <aoc/StringStateMachine.h> MullItOver::MullItOver() : Solver{}, data_{}, states_ { diff --git a/AdventOfCode2024/MullStates.cpp b/src/MullStates.cpp similarity index 96% rename from AdventOfCode2024/MullStates.cpp rename to src/MullStates.cpp index 4d81379..180c09f 100644 --- a/AdventOfCode2024/MullStates.cpp +++ b/src/MullStates.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullStates.h" +#include <aoc/MullStates.h> MullStates::MullStates(MullData& data) { diff --git a/AdventOfCode2024/MullToggleCloseState.cpp b/src/MullToggleCloseState.cpp similarity index 93% rename from AdventOfCode2024/MullToggleCloseState.cpp rename to src/MullToggleCloseState.cpp index 5084c47..404814b 100644 --- a/AdventOfCode2024/MullToggleCloseState.cpp +++ b/src/MullToggleCloseState.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "MullToggleCloseState.h" +#include <aoc/MullToggleCloseState.h> MullToggleCloseState::MullToggleCloseState(const bool isEnabler) : isEnabler_{ isEnabler }, successState_{} {} diff --git a/AdventOfCode2024/Point2.cpp b/src/Point2.cpp similarity index 98% rename from AdventOfCode2024/Point2.cpp rename to src/Point2.cpp index e632533..a33e0e1 100644 --- a/AdventOfCode2024/Point2.cpp +++ b/src/Point2.cpp @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "Point2.h" +#include <aoc/Point2.h> const Point2 Point2::left{ -1, 0 }; const Point2 Point2::right{ 1, 0 }; diff --git a/AdventOfCode2024/PrintQueue.cpp b/src/PrintQueue.cpp similarity index 99% rename from AdventOfCode2024/PrintQueue.cpp rename to src/PrintQueue.cpp index 262fca6..8e6de66 100644 --- a/AdventOfCode2024/PrintQueue.cpp +++ b/src/PrintQueue.cpp @@ -17,7 +17,7 @@ #include <sstream> #include <vector> -#include "PrintQueue.h" +#include <aoc/PrintQueue.h> PrintQueue::PrintQueue() : Solver{}, pageNoMapIndex_{ 0 }, isProcessingOrderingRules_{ true }, orderingRules_{} diff --git a/AdventOfCode2024/Program.cpp b/src/Program.cpp similarity index 78% rename from AdventOfCode2024/Program.cpp rename to src/Program.cpp index d0abe52..ec34b34 100644 --- a/AdventOfCode2024/Program.cpp +++ b/src/Program.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -16,16 +16,16 @@ #include <iostream> #include <memory> -#include "Program.h" -#include "SolverEngine.h" +#include <aoc/Program.h> +#include <aoc/SolverEngine.h> // Solver implementations in day order. -#include "HistorianHysteria.h" -#include "RedNosedReports.h" -#include "MullItOver.h" -#include "CeresSearch.h" -#include "PrintQueue.h" -#include "GuardGallivant.h" +#include <aoc/HistorianHysteria.h> +#include <aoc/RedNosedReports.h> +#include <aoc/MullItOver.h> +#include <aoc/CeresSearch.h> +#include <aoc/PrintQueue.h> +#include <aoc/GuardGallivant.h> void Program::run() { @@ -46,5 +46,5 @@ void Program::runSolvers() std::vector<std::string> Program::getInputPaths() const { - return std::vector<std::string>{ "data", "../../data" }; + return std::vector<std::string>{ "data", "../../../data", "../../../../data" }; } diff --git a/AdventOfCode2024/RedNosedReports.cpp b/src/RedNosedReports.cpp similarity index 98% rename from AdventOfCode2024/RedNosedReports.cpp rename to src/RedNosedReports.cpp index 157f082..b71cb08 100644 --- a/AdventOfCode2024/RedNosedReports.cpp +++ b/src/RedNosedReports.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -17,7 +17,7 @@ #include <sstream> #include <vector> -#include "RedNosedReports.h" +#include <aoc/RedNosedReports.h> std::string RedNosedReports::getPuzzleName() const { diff --git a/AdventOfCode2024/Solver.cpp b/src/Solver.cpp similarity index 93% rename from AdventOfCode2024/Solver.cpp rename to src/Solver.cpp index b788f5e..96f361e 100644 --- a/AdventOfCode2024/Solver.cpp +++ b/src/Solver.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "Solver.h" +#include <aoc/Solver.h> Solver::Solver() : part1{ 0 }, part2{ 0 } {} diff --git a/AdventOfCode2024/SolverEngine.cpp b/src/SolverEngine.cpp similarity index 97% rename from AdventOfCode2024/SolverEngine.cpp rename to src/SolverEngine.cpp index 72314d8..da30b26 100644 --- a/AdventOfCode2024/SolverEngine.cpp +++ b/src/SolverEngine.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -16,7 +16,7 @@ #include <fstream> #include <iostream> -#include "SolverEngine.h" +#include <aoc/SolverEngine.h> SolverEngine::SolverEngine(const std::vector<std::string>& inputPaths) : inputPaths_{ inputPaths } {} diff --git a/AdventOfCode2024/StringStateMachine.cpp b/src/StringStateMachine.cpp similarity index 94% rename from AdventOfCode2024/StringStateMachine.cpp rename to src/StringStateMachine.cpp index 4235df4..9db2dee 100644 --- a/AdventOfCode2024/StringStateMachine.cpp +++ b/src/StringStateMachine.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "StringStateMachine.h" +#include <aoc/StringStateMachine.h> StringStateMachine::StringStateMachine(const std::string& line, StringState& entryState) { diff --git a/AdventOfCode2024/UnitTests/Part1TestContext.h b/tests/include/aocTests/Part1TestContext.h similarity index 87% rename from AdventOfCode2024/UnitTests/Part1TestContext.h rename to tests/include/aocTests/Part1TestContext.h index a10f634..a3de57e 100644 --- a/AdventOfCode2024/UnitTests/Part1TestContext.h +++ b/tests/include/aocTests/Part1TestContext.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "TestContext.h" +#include <aocTests/TestContext.h> -class Part1TestContext : - public TestContext +class Part1TestContext + : public TestContext { public: Part1TestContext(std::vector<std::string> inputPaths); diff --git a/AdventOfCode2024/UnitTests/Part2TestContext.h b/tests/include/aocTests/Part2TestContext.h similarity index 87% rename from AdventOfCode2024/UnitTests/Part2TestContext.h rename to tests/include/aocTests/Part2TestContext.h index d157fbe..a7bf364 100644 --- a/AdventOfCode2024/UnitTests/Part2TestContext.h +++ b/tests/include/aocTests/Part2TestContext.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -15,10 +15,10 @@ #pragma once -#include "TestContext.h" +#include <aocTests/TestContext.h> -class Part2TestContext : - public TestContext +class Part2TestContext + : public TestContext { public: Part2TestContext(std::vector<std::string> inputPaths); diff --git a/AdventOfCode2024/UnitTests/TestContext.h b/tests/include/aocTests/TestContext.h similarity index 94% rename from AdventOfCode2024/UnitTests/TestContext.h rename to tests/include/aocTests/TestContext.h index d8255cb..a515dd7 100644 --- a/AdventOfCode2024/UnitTests/TestContext.h +++ b/tests/include/aocTests/TestContext.h @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -18,7 +18,7 @@ #include <string> #include <vector> -#include <Solver.h> +#include <aoc/Solver.h> class TestContext { diff --git a/AdventOfCode2024/UnitTests/Part1TestContext.cpp b/tests/src/Part1TestContext.cpp similarity index 91% rename from AdventOfCode2024/UnitTests/Part1TestContext.cpp rename to tests/src/Part1TestContext.cpp index 7601f3c..8739144 100644 --- a/AdventOfCode2024/UnitTests/Part1TestContext.cpp +++ b/tests/src/Part1TestContext.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,8 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "pch.h" -#include "Part1TestContext.h" +#include <aocTests/Part1TestContext.h> Part1TestContext::Part1TestContext(std::vector<std::string> inputPaths) : TestContext{ inputPaths } {} diff --git a/AdventOfCode2024/UnitTests/Part2TestContext.cpp b/tests/src/Part2TestContext.cpp similarity index 91% rename from AdventOfCode2024/UnitTests/Part2TestContext.cpp rename to tests/src/Part2TestContext.cpp index a3b3b63..455dab4 100644 --- a/AdventOfCode2024/UnitTests/Part2TestContext.cpp +++ b/tests/src/Part2TestContext.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,8 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "pch.h" -#include "Part2TestContext.h" +#include <aocTests/Part2TestContext.h> Part2TestContext::Part2TestContext(std::vector<std::string> inputPaths) : TestContext{ inputPaths } {} diff --git a/tests/src/TestCases.cpp b/tests/src/TestCases.cpp new file mode 100644 index 0000000..4debf88 --- /dev/null +++ b/tests/src/TestCases.cpp @@ -0,0 +1,70 @@ +// 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 <http://www.gnu.org/licenses/>. + +#include <aocTests/Part1TestContext.h> +#include <aocTests/Part2TestContext.h> + +#include <aoc/Solver.h> +#include <aoc/SolverEngine.h> +#include <aoc/HistorianHysteria.h> + +#include <catch2/catch_test_macros.hpp> + +#define REQUIRE_MESSAGE(cond, msg) if (!(cond)) { INFO(msg); REQUIRE(cond); } + +class HistorianHysteriaTests +{ +public: + Part1TestContext part1TestContext_{ getInputPaths() }; + Part2TestContext part2TestContext_{ getInputPaths() }; + Part1TestContext part1ExampleTestContext_{ getExampleInputPaths() }; + Part2TestContext part2ExampleTestContext_{ getExampleInputPaths() }; + + void runTest(Solver &solver, const long long int expected, const TestContext &context) + { + SolverEngine solverEngine{context.getInputPaths()}; + solverEngine.run(solver); + + REQUIRE(expected == context.getResult(solver)); + } + +private: + std::vector<std::string> getInputPaths() const + { + return std::vector<std::string>{ "data", "../../../data", "../../../../data" }; + } + + std::vector<std::string> getExampleInputPaths() const + { + return std::vector<std::string>{ "data/examples", "../../../data/examples", "../../../../data/examples" }; + } +}; + +TEST_CASE( "[HistorianHysteriaTests]" ) +{ + HistorianHysteriaTests tests; + SECTION( "FullData1" ) { + tests.runTest(*std::make_unique<HistorianHysteria>(), 2176849, tests.part1TestContext_); + } + SECTION( "FullData2" ) { + tests.runTest(*std::make_unique<HistorianHysteria>(), 23384288, tests.part2TestContext_); + } + SECTION( "ExampleData1" ) { + tests.runTest(*std::make_unique<HistorianHysteria>(), 11, tests.part1ExampleTestContext_); + } + SECTION( "ExampleData2" ) { + tests.runTest(*std::make_unique<HistorianHysteria>(), 31, tests.part2ExampleTestContext_); + } +} diff --git a/AdventOfCode2024/UnitTests/TestContext.cpp b/tests/src/TestContext.cpp similarity index 91% rename from AdventOfCode2024/UnitTests/TestContext.cpp rename to tests/src/TestContext.cpp index 3abd629..0d89ae6 100644 --- a/AdventOfCode2024/UnitTests/TestContext.cpp +++ b/tests/src/TestContext.cpp @@ -1,5 +1,5 @@ // Solutions to the Advent Of Code 2024. -// Copyright (C) 2024 Stefan M�ller +// 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 @@ -13,8 +13,7 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see <http://www.gnu.org/licenses/>. -#include "pch.h" -#include "TestContext.h" +#include <aocTests/TestContext.h> TestContext::TestContext(std::vector<std::string> inputPaths) : inputPaths_{ inputPaths } {}