From 880f9f2a7533b9b7adf8760aaa4387273bebabfb Mon Sep 17 00:00:00 2001 From: Luke Else Date: Wed, 30 Nov 2022 22:12:48 +0000 Subject: [PATCH] Updated main and aoc2022 ready for tomorrow :) --- .gitignore | 2 +- AdventOfCode2022.vcxproj | 1 + AdventOfCode2022.vcxproj.filters | 3 ++ src/aoc2022.h | 10 +++- src/days/days.h | 26 +++++++++++ src/main.cpp | 78 ++++++++++++++++++++++---------- 6 files changed, 93 insertions(+), 27 deletions(-) create mode 100644 src/days/days.h diff --git a/.gitignore b/.gitignore index c5da2ff..de518c3 100644 --- a/.gitignore +++ b/.gitignore @@ -447,4 +447,4 @@ FodyWeavers.xsd *.app #Advent of Code Solutions -.[Oo]utput \ No newline at end of file +./[Oo]utput \ No newline at end of file diff --git a/AdventOfCode2022.vcxproj b/AdventOfCode2022.vcxproj index ecca0ba..17a66ae 100644 --- a/AdventOfCode2022.vcxproj +++ b/AdventOfCode2022.vcxproj @@ -157,6 +157,7 @@ + diff --git a/AdventOfCode2022.vcxproj.filters b/AdventOfCode2022.vcxproj.filters index 71c7328..9c5ea06 100644 --- a/AdventOfCode2022.vcxproj.filters +++ b/AdventOfCode2022.vcxproj.filters @@ -101,6 +101,9 @@ Header Files + + Header Files + diff --git a/src/aoc2022.h b/src/aoc2022.h index 338e495..cb74b7c 100644 --- a/src/aoc2022.h +++ b/src/aoc2022.h @@ -1,5 +1,13 @@ #pragma once +#include #include +#include +#include +#include +#include +#include +#include +#include template struct SDay { @@ -7,7 +15,7 @@ struct SDay { std::ifstream input; //Constructor and Destructor - SDay(std::string); + SDay(std::string name); ~SDay(); virtual Output part1() const = 0; diff --git a/src/days/days.h b/src/days/days.h new file mode 100644 index 0000000..4bd4fe9 --- /dev/null +++ b/src/days/days.h @@ -0,0 +1,26 @@ +#pragma once +#include "day01.cpp" +#include "day02.cpp" +#include "day03.cpp" +#include "day04.cpp" +#include "day05.cpp" +#include "day06.cpp" +#include "day07.cpp" +#include "day08.cpp" +#include "day09.cpp" +#include "day10.cpp" +#include "day11.cpp" +#include "day12.cpp" +#include "day13.cpp" +#include "day14.cpp" +#include "day15.cpp" +#include "day16.cpp" +#include "day17.cpp" +#include "day18.cpp" +#include "day19.cpp" +#include "day20.cpp" +#include "day21.cpp" +#include "day22.cpp" +#include "day23.cpp" +#include "day24.cpp" +#include "day25.cpp" \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 8a1fa04..65e872d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,31 +1,59 @@ -#include "aoc2022.h" -#include -#include "days/Source.cpp" +#include "days/days.h" + +template +void runSolutions() { + //Heap allocate all solutions + std::vector*> solutions = { + new SDay01("day01"), + new SDay02("day02"), + new SDay03("day03"), + new SDay04("day04"), + new SDay05("day05"), + new SDay06("day06"), + new SDay07("day07"), + new SDay08("day08"), + new SDay09("day09"), + new SDay11("day11"), + new SDay12("day12"), + new SDay13("day13"), + new SDay14("day14"), + new SDay15("day15"), + new SDay16("day16"), + new SDay17("day17"), + new SDay18("day18"), + new SDay19("day19"), + new SDay20("day20"), + new SDay21("day21"), + new SDay22("day22"), + new SDay23("day23"), + new SDay24("day24"), + new SDay25("day25"), + }; + + for (auto& solution : solutions) + {//Run each day in turn, recording execution times for each part + std::cout << " Name Part 1 Part 2 Elapsed\n"; + std::cout << "=================================================================\n"; + std::cout << " " << solution->name; + + //Run solutions and keep timer on each + std::ofstream output("output/" + solution->name); + + auto start = std::chrono::steady_clock::now(); + output << solution->part1() << std::endl; + std::chrono::duration part1Time = std::chrono::steady_clock::now() - start; + output << solution->part2(); + std::chrono::duration part2Time = std::chrono::steady_clock::now() - start - part1Time; + std::chrono::duration elapsedTime = std::chrono::steady_clock::now() - start; + + std::cout << " " << 1e3 * part1Time.count() << "ms " << 1e3 * part2Time.count() << "ms " << 1e3 * elapsedTime.count() << "ms\n" << std::endl; + + //Free memory for heap allocated solution + delete solution; -void createDays() { - std::string fileName; - std::string line; - std::ofstream file; - for (int i = 1; i <= 25; i++) - { - std::ifstream source{ "src/days/Source.cpp" }; - if (i < 10) - { - file.open("src/days/day0" + std::to_string(i) + ".cpp"); - } - else - { - file.open("src/days/day" + std::to_string(i) + ".cpp"); - } - while (std::getline(source, line)) - { - file << line << "\n"; - } - file.close(); } } int main() { - //SDay01 day1("day01"); - createDays(); + runSolutions(); }