From 979961d60eb2a445ef2ddba69fc42330730c466d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Fri, 14 Feb 2025 17:13:05 +0100 Subject: [PATCH] Change Solver puzzle title use and add optional input file name suffix --- include/aoc/BridgeRepair.hpp | 2 +- include/aoc/CeresSearch.hpp | 2 +- include/aoc/DiskFragmenter.hpp | 2 +- include/aoc/GardenGroups.hpp | 2 +- include/aoc/GuardGallivant.hpp | 2 +- include/aoc/HistorianHysteria.hpp | 2 +- include/aoc/HoofIt.hpp | 2 +- include/aoc/LanParty.hpp | 2 +- include/aoc/MullItOver.hpp | 2 +- include/aoc/PlutonianPebbles.hpp | 2 +- include/aoc/PrintQueue.hpp | 2 +- include/aoc/RedNosedReports.hpp | 2 +- include/aoc/ResonantCollinearity.hpp | 2 +- include/aoc/Solver.hpp | 11 ++++++--- src/BridgeRepair.cpp | 6 ++--- src/CeresSearch.cpp | 6 ++--- src/DiskFragmenter.cpp | 6 ++--- src/GardenGroups.cpp | 6 ++--- src/GuardGallivant.cpp | 6 ++--- src/HistorianHysteria.cpp | 6 ++--- src/HoofIt.cpp | 6 ++--- src/LanParty.cpp | 6 ++--- src/MullItOver.cpp | 6 ++--- src/PlutonianPebbles.cpp | 6 ++--- src/PrintQueue.cpp | 6 ++--- src/RedNosedReports.cpp | 6 ++--- src/ResonantCollinearity.cpp | 6 ++--- src/Solver.cpp | 36 ++++++++++++++++++++++++++-- src/SolverEngine.cpp | 2 +- 29 files changed, 95 insertions(+), 58 deletions(-) diff --git a/include/aoc/BridgeRepair.hpp b/include/aoc/BridgeRepair.hpp index f30824a..a531fbc 100644 --- a/include/aoc/BridgeRepair.hpp +++ b/include/aoc/BridgeRepair.hpp @@ -24,7 +24,7 @@ class BridgeRepair { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/CeresSearch.hpp b/include/aoc/CeresSearch.hpp index 0507097..5bab06e 100644 --- a/include/aoc/CeresSearch.hpp +++ b/include/aoc/CeresSearch.hpp @@ -24,7 +24,7 @@ class CeresSearch { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void finish() override; private: const char xmas_[4] = { 'X', 'M', 'A', 'S' }; diff --git a/include/aoc/DiskFragmenter.hpp b/include/aoc/DiskFragmenter.hpp index 19ae2fd..d4c21dd 100644 --- a/include/aoc/DiskFragmenter.hpp +++ b/include/aoc/DiskFragmenter.hpp @@ -26,7 +26,7 @@ class DiskFragmenter { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/GardenGroups.hpp b/include/aoc/GardenGroups.hpp index b4ad1f1..92fb9f0 100644 --- a/include/aoc/GardenGroups.hpp +++ b/include/aoc/GardenGroups.hpp @@ -26,7 +26,7 @@ class GardenGroups { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void finish() override; private: void traverseRegion(Grid& isVisited, std::stack& otherRegionsStack, const Point2& start); diff --git a/include/aoc/GuardGallivant.hpp b/include/aoc/GuardGallivant.hpp index b0ef5df..24f441b 100644 --- a/include/aoc/GuardGallivant.hpp +++ b/include/aoc/GuardGallivant.hpp @@ -22,7 +22,7 @@ class GuardGallivant { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/HistorianHysteria.hpp b/include/aoc/HistorianHysteria.hpp index 57e500b..782ba95 100644 --- a/include/aoc/HistorianHysteria.hpp +++ b/include/aoc/HistorianHysteria.hpp @@ -24,7 +24,7 @@ class HistorianHysteria { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/HoofIt.hpp b/include/aoc/HoofIt.hpp index f4d31da..c1c2779 100644 --- a/include/aoc/HoofIt.hpp +++ b/include/aoc/HoofIt.hpp @@ -25,7 +25,7 @@ class HoofIt { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void finish() override; private: static constexpr char getTrailheadChar(); diff --git a/include/aoc/LanParty.hpp b/include/aoc/LanParty.hpp index 4509d97..1715cf0 100644 --- a/include/aoc/LanParty.hpp +++ b/include/aoc/LanParty.hpp @@ -22,7 +22,7 @@ class LanParty : public Solver { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/MullItOver.hpp b/include/aoc/MullItOver.hpp index 8da8cde..f6111f9 100644 --- a/include/aoc/MullItOver.hpp +++ b/include/aoc/MullItOver.hpp @@ -25,7 +25,7 @@ class MullItOver public: MullItOver(); virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/PlutonianPebbles.hpp b/include/aoc/PlutonianPebbles.hpp index 9680f68..2e1dd7e 100644 --- a/include/aoc/PlutonianPebbles.hpp +++ b/include/aoc/PlutonianPebbles.hpp @@ -24,7 +24,7 @@ class PlutonianPebbles : public Solver { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/PrintQueue.hpp b/include/aoc/PrintQueue.hpp index 39b2212..1e574c9 100644 --- a/include/aoc/PrintQueue.hpp +++ b/include/aoc/PrintQueue.hpp @@ -26,7 +26,7 @@ class PrintQueue public: PrintQueue(); virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/RedNosedReports.hpp b/include/aoc/RedNosedReports.hpp index 6e6aba5..83be78e 100644 --- a/include/aoc/RedNosedReports.hpp +++ b/include/aoc/RedNosedReports.hpp @@ -24,7 +24,7 @@ class RedNosedReports { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void processDataLine(const std::string& line) override; virtual void finish() override; private: diff --git a/include/aoc/ResonantCollinearity.hpp b/include/aoc/ResonantCollinearity.hpp index 925c388..a5cb040 100644 --- a/include/aoc/ResonantCollinearity.hpp +++ b/include/aoc/ResonantCollinearity.hpp @@ -27,7 +27,7 @@ class ResonantCollinearity { public: virtual const std::string getPuzzleName() const override; - virtual const std::string getInputFileName() const override; + virtual const int getPuzzleDay() const override; virtual void finish() override; private: static constexpr char getEmptyChar(); diff --git a/include/aoc/Solver.hpp b/include/aoc/Solver.hpp index 3ef06ba..afa3138 100644 --- a/include/aoc/Solver.hpp +++ b/include/aoc/Solver.hpp @@ -20,15 +20,20 @@ class Solver { public: - Solver(); + Solver(const int inputFileNameSuffix = 0); virtual ~Solver(){}; + const std::string getPuzzleTitle() const; + const std::string getInputFileName() const; virtual const std::string getPuzzleName() const = 0; - virtual const std::string getInputFileName() const = 0; - virtual void processDataLine(const std::string &line) = 0; + virtual const int getPuzzleDay() 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; +private: + int inputFileNameSuffix_; + std::string clean(const std::string& original) const; }; diff --git a/src/BridgeRepair.cpp b/src/BridgeRepair.cpp index fd270c8..975fd8c 100644 --- a/src/BridgeRepair.cpp +++ b/src/BridgeRepair.cpp @@ -22,12 +22,12 @@ const std::string BridgeRepair::getPuzzleName() const { - return "Day 7: Bridge Repair"; + return "Bridge Repair"; } -const std::string BridgeRepair::getInputFileName() const +const int BridgeRepair::getPuzzleDay() const { - return "bridge_repair.txt"; + return 7; } void BridgeRepair::processDataLine(const std::string& line) diff --git a/src/CeresSearch.cpp b/src/CeresSearch.cpp index 165c2b9..0be518a 100644 --- a/src/CeresSearch.cpp +++ b/src/CeresSearch.cpp @@ -17,12 +17,12 @@ const std::string CeresSearch::getPuzzleName() const { - return "Day 4: Ceres Search"; + return "Ceres Search"; } -const std::string CeresSearch::getInputFileName() const +const int CeresSearch::getPuzzleDay() const { - return "ceres_search.txt"; + return 4; } void CeresSearch::finish() diff --git a/src/DiskFragmenter.cpp b/src/DiskFragmenter.cpp index 9a3e2e3..058649e 100644 --- a/src/DiskFragmenter.cpp +++ b/src/DiskFragmenter.cpp @@ -19,12 +19,12 @@ const std::string DiskFragmenter::getPuzzleName() const { - return "Day 9: Disk Fragmenter"; + return "Disk Fragmenter"; } -const std::string DiskFragmenter::getInputFileName() const +const int DiskFragmenter::getPuzzleDay() const { - return "disk_fragmenter.txt"; + return 9; } void DiskFragmenter::processDataLine(const std::string& line) diff --git a/src/GardenGroups.cpp b/src/GardenGroups.cpp index 44dc3aa..0d3c793 100644 --- a/src/GardenGroups.cpp +++ b/src/GardenGroups.cpp @@ -17,12 +17,12 @@ const std::string GardenGroups::getPuzzleName() const { - return "Day 12: Garden Groups"; + return "Garden Groups"; } -const std::string GardenGroups::getInputFileName() const +const int GardenGroups::getPuzzleDay() const { - return "garden_groups.txt"; + return 12; } void GardenGroups::finish() diff --git a/src/GuardGallivant.cpp b/src/GuardGallivant.cpp index 351c05a..6f7116a 100644 --- a/src/GuardGallivant.cpp +++ b/src/GuardGallivant.cpp @@ -17,12 +17,12 @@ const std::string GuardGallivant::getPuzzleName() const { - return "Day 6: Guard Gallivant"; + return "Guard Gallivant"; } -const std::string GuardGallivant::getInputFileName() const +const int GuardGallivant::getPuzzleDay() const { - return "guard_gallivant.txt"; + return 6; } void GuardGallivant::processDataLine(const std::string& line) diff --git a/src/HistorianHysteria.cpp b/src/HistorianHysteria.cpp index 71e9b27..b7cb655 100644 --- a/src/HistorianHysteria.cpp +++ b/src/HistorianHysteria.cpp @@ -17,12 +17,12 @@ const std::string HistorianHysteria::getPuzzleName() const { - return "Day 1: Historian Hysteria"; + return "Historian Hysteria"; } -const std::string HistorianHysteria::getInputFileName() const +const int HistorianHysteria::getPuzzleDay() const { - return "historian_hysteria.txt"; + return 1; } void HistorianHysteria::processDataLine(const std::string& line) diff --git a/src/HoofIt.cpp b/src/HoofIt.cpp index caf6ac7..21db13e 100644 --- a/src/HoofIt.cpp +++ b/src/HoofIt.cpp @@ -24,12 +24,12 @@ const std::string HoofIt::getPuzzleName() const { - return "Day 10: Hoof It"; + return "Hoof It"; } -const std::string HoofIt::getInputFileName() const +const int HoofIt::getPuzzleDay() const { - return "hoof_it.txt"; + return 10; } void HoofIt::finish() diff --git a/src/LanParty.cpp b/src/LanParty.cpp index 5d273fe..ca13d1e 100644 --- a/src/LanParty.cpp +++ b/src/LanParty.cpp @@ -17,12 +17,12 @@ const std::string LanParty::getPuzzleName() const { - return "Day 23: LAN Party"; + return "LAN Party"; } -const std::string LanParty::getInputFileName() const +const int LanParty::getPuzzleDay() const { - return "lan_party.txt"; + return 23; } void LanParty::processDataLine(const std::string& line) diff --git a/src/MullItOver.cpp b/src/MullItOver.cpp index c203ecc..81f4ab7 100644 --- a/src/MullItOver.cpp +++ b/src/MullItOver.cpp @@ -24,12 +24,12 @@ MullItOver::MullItOver() const std::string MullItOver::getPuzzleName() const { - return "Day 3: Mull It Over"; + return "Mull It Over"; } -const std::string MullItOver::getInputFileName() const +const int MullItOver::getPuzzleDay() const { - return "mull_it_over.txt"; + return 3; } void MullItOver::processDataLine(const std::string& line) diff --git a/src/PlutonianPebbles.cpp b/src/PlutonianPebbles.cpp index 2a52ced..f1005da 100644 --- a/src/PlutonianPebbles.cpp +++ b/src/PlutonianPebbles.cpp @@ -20,12 +20,12 @@ const std::string PlutonianPebbles::getPuzzleName() const { - return "Day 11: Plutonian Pebbles"; + return "Plutonian Pebbles"; } -const std::string PlutonianPebbles::getInputFileName() const +const int PlutonianPebbles::getPuzzleDay() const { - return "plutonian_pebbles.txt"; + return 11; } void PlutonianPebbles::processDataLine(const std::string& line) diff --git a/src/PrintQueue.cpp b/src/PrintQueue.cpp index f636031..9b91fdd 100644 --- a/src/PrintQueue.cpp +++ b/src/PrintQueue.cpp @@ -28,12 +28,12 @@ PrintQueue::PrintQueue() const std::string PrintQueue::getPuzzleName() const { - return "Day 5: Print Queue"; + return "Print Queue"; } -const std::string PrintQueue::getInputFileName() const +const int PrintQueue::getPuzzleDay() const { - return "print_queue.txt"; + return 5; } void PrintQueue::processDataLine(const std::string& line) diff --git a/src/RedNosedReports.cpp b/src/RedNosedReports.cpp index 147bb33..c5e5bcc 100644 --- a/src/RedNosedReports.cpp +++ b/src/RedNosedReports.cpp @@ -20,12 +20,12 @@ const std::string RedNosedReports::getPuzzleName() const { - return "Day 2: Red-Nosed Reports"; + return "Red-Nosed Reports"; } -const std::string RedNosedReports::getInputFileName() const +const int RedNosedReports::getPuzzleDay() const { - return "red-nosed_reports.txt"; + return 2; } // 'X' in the comments here and below marks the level that must be ignored to make the report safe. diff --git a/src/ResonantCollinearity.cpp b/src/ResonantCollinearity.cpp index 079c482..e32f0e5 100644 --- a/src/ResonantCollinearity.cpp +++ b/src/ResonantCollinearity.cpp @@ -17,12 +17,12 @@ const std::string ResonantCollinearity::getPuzzleName() const { - return "Day 8: Resonant Collinearity"; + return "Resonant Collinearity"; } -const std::string ResonantCollinearity::getInputFileName() const +const int ResonantCollinearity::getPuzzleDay() const { - return "resonant_collinearity.txt"; + return 8; } void ResonantCollinearity::finish() diff --git a/src/Solver.cpp b/src/Solver.cpp index 316c1cc..4e81b27 100644 --- a/src/Solver.cpp +++ b/src/Solver.cpp @@ -15,11 +15,32 @@ #include -Solver::Solver() - : part1{ 0 }, part2{ 0 } +#include + +Solver::Solver(const int inputFileNameSuffix) + : inputFileNameSuffix_{ inputFileNameSuffix }, part1{ 0 }, part2{ 0 } { } +const std::string Solver::getPuzzleTitle() const +{ + std::ostringstream oss; + oss << "Day " << getPuzzleDay() << ": " << getPuzzleName(); + return oss.str(); +} + +const std::string Solver::getInputFileName() const +{ + std::ostringstream oss; + oss << clean(getPuzzleName()); + if (inputFileNameSuffix_ > 0) + { + oss << "_" << inputFileNameSuffix_; + } + oss << ".txt"; + return oss.str(); +} + long long int Solver::getResultPart1() const { return part1; @@ -29,3 +50,14 @@ long long int Solver::getResultPart2() const { return part2; } + +std::string Solver::clean(const std::string& original) const +{ + std::string cleaned{ original }; + size_t start_pos = 0; + while ((start_pos = cleaned.find(" ", start_pos)) != std::string::npos) + { + cleaned.replace(start_pos, 1, "_"); + } + return cleaned; +} diff --git a/src/SolverEngine.cpp b/src/SolverEngine.cpp index 1f2792b..1217e3f 100644 --- a/src/SolverEngine.cpp +++ b/src/SolverEngine.cpp @@ -25,7 +25,7 @@ SolverEngine::SolverEngine(const std::vector& inputPaths) void SolverEngine::run(Solver& solver) { - std::cout << "\n--- " << solver.getPuzzleName() << " ---\n"; + std::cout << "\n--- " << solver.getPuzzleTitle() << " ---\n"; auto fullFilePath = tryGetValidFullInputFilePath(solver.getInputFileName()); if (fullFilePath != "")