Change Solver puzzle title use and add optional input file name suffix

This commit is contained in:
Stefan Müller 2025-02-14 17:13:05 +01:00
parent 28baf4db3e
commit 979961d60e
29 changed files with 95 additions and 58 deletions

View File

@ -24,7 +24,7 @@ class BridgeRepair
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -24,7 +24,7 @@ class CeresSearch
{ {
public: public:
virtual const std::string getPuzzleName() const override; virtual const std::string getPuzzleName() const override;
virtual const std::string getInputFileName() const override; virtual const int getPuzzleDay() const override;
virtual void finish() override; virtual void finish() override;
private: private:
const char xmas_[4] = { 'X', 'M', 'A', 'S' }; const char xmas_[4] = { 'X', 'M', 'A', 'S' };

View File

@ -26,7 +26,7 @@ class DiskFragmenter
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -26,7 +26,7 @@ class GardenGroups
{ {
public: public:
virtual const std::string getPuzzleName() const override; virtual const std::string getPuzzleName() const override;
virtual const std::string getInputFileName() const override; virtual const int getPuzzleDay() const override;
virtual void finish() override; virtual void finish() override;
private: private:
void traverseRegion(Grid<bool>& isVisited, std::stack<Point2>& otherRegionsStack, const Point2& start); void traverseRegion(Grid<bool>& isVisited, std::stack<Point2>& otherRegionsStack, const Point2& start);

View File

@ -22,7 +22,7 @@ class GuardGallivant
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -24,7 +24,7 @@ class HistorianHysteria
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -25,7 +25,7 @@ class HoofIt
{ {
public: public:
virtual const std::string getPuzzleName() const override; virtual const std::string getPuzzleName() const override;
virtual const std::string getInputFileName() const override; virtual const int getPuzzleDay() const override;
virtual void finish() override; virtual void finish() override;
private: private:
static constexpr char getTrailheadChar(); static constexpr char getTrailheadChar();

View File

@ -22,7 +22,7 @@ class LanParty : public Solver
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -25,7 +25,7 @@ class MullItOver
public: public:
MullItOver(); MullItOver();
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -24,7 +24,7 @@ class PlutonianPebbles : public Solver
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -26,7 +26,7 @@ class PrintQueue
public: public:
PrintQueue(); PrintQueue();
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -24,7 +24,7 @@ class RedNosedReports
{ {
public: public:
virtual const std::string getPuzzleName() const override; 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 processDataLine(const std::string& line) override;
virtual void finish() override; virtual void finish() override;
private: private:

View File

@ -27,7 +27,7 @@ class ResonantCollinearity
{ {
public: public:
virtual const std::string getPuzzleName() const override; virtual const std::string getPuzzleName() const override;
virtual const std::string getInputFileName() const override; virtual const int getPuzzleDay() const override;
virtual void finish() override; virtual void finish() override;
private: private:
static constexpr char getEmptyChar(); static constexpr char getEmptyChar();

View File

@ -20,15 +20,20 @@
class Solver class Solver
{ {
public: public:
Solver(); Solver(const int inputFileNameSuffix = 0);
virtual ~Solver(){}; virtual ~Solver(){};
const std::string getPuzzleTitle() const;
const std::string getInputFileName() const;
virtual const std::string getPuzzleName() const = 0; virtual const std::string getPuzzleName() const = 0;
virtual const std::string getInputFileName() const = 0; virtual const int getPuzzleDay() const = 0;
virtual void processDataLine(const std::string &line) = 0; virtual void processDataLine(const std::string& line) = 0;
virtual void finish() = 0; virtual void finish() = 0;
long long int getResultPart1() const; long long int getResultPart1() const;
long long int getResultPart2() const; long long int getResultPart2() const;
protected: protected:
long long int part1; long long int part1;
long long int part2; long long int part2;
private:
int inputFileNameSuffix_;
std::string clean(const std::string& original) const;
}; };

View File

@ -22,12 +22,12 @@
const std::string BridgeRepair::getPuzzleName() const 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) void BridgeRepair::processDataLine(const std::string& line)

View File

@ -17,12 +17,12 @@
const std::string CeresSearch::getPuzzleName() const 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() void CeresSearch::finish()

View File

@ -19,12 +19,12 @@
const std::string DiskFragmenter::getPuzzleName() const 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) void DiskFragmenter::processDataLine(const std::string& line)

View File

@ -17,12 +17,12 @@
const std::string GardenGroups::getPuzzleName() const 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() void GardenGroups::finish()

View File

@ -17,12 +17,12 @@
const std::string GuardGallivant::getPuzzleName() const 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) void GuardGallivant::processDataLine(const std::string& line)

View File

@ -17,12 +17,12 @@
const std::string HistorianHysteria::getPuzzleName() const 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) void HistorianHysteria::processDataLine(const std::string& line)

View File

@ -24,12 +24,12 @@
const std::string HoofIt::getPuzzleName() const 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() void HoofIt::finish()

View File

@ -17,12 +17,12 @@
const std::string LanParty::getPuzzleName() const 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) void LanParty::processDataLine(const std::string& line)

View File

@ -24,12 +24,12 @@ MullItOver::MullItOver()
const std::string MullItOver::getPuzzleName() const 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) void MullItOver::processDataLine(const std::string& line)

View File

@ -20,12 +20,12 @@
const std::string PlutonianPebbles::getPuzzleName() const 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) void PlutonianPebbles::processDataLine(const std::string& line)

View File

@ -28,12 +28,12 @@ PrintQueue::PrintQueue()
const std::string PrintQueue::getPuzzleName() const 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) void PrintQueue::processDataLine(const std::string& line)

View File

@ -20,12 +20,12 @@
const std::string RedNosedReports::getPuzzleName() const 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. // 'X' in the comments here and below marks the level that must be ignored to make the report safe.

View File

@ -17,12 +17,12 @@
const std::string ResonantCollinearity::getPuzzleName() const 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() void ResonantCollinearity::finish()

View File

@ -15,11 +15,32 @@
#include <aoc/Solver.hpp> #include <aoc/Solver.hpp>
Solver::Solver() #include <sstream>
: part1{ 0 }, part2{ 0 }
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 long long int Solver::getResultPart1() const
{ {
return part1; return part1;
@ -29,3 +50,14 @@ long long int Solver::getResultPart2() const
{ {
return part2; 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;
}

View File

@ -25,7 +25,7 @@ SolverEngine::SolverEngine(const std::vector<std::string>& inputPaths)
void SolverEngine::run(Solver& solver) void SolverEngine::run(Solver& solver)
{ {
std::cout << "\n--- " << solver.getPuzzleName() << " ---\n"; std::cout << "\n--- " << solver.getPuzzleTitle() << " ---\n";
auto fullFilePath = tryGetValidFullInputFilePath(solver.getInputFileName()); auto fullFilePath = tryGetValidFullInputFilePath(solver.getInputFileName());
if (fullFilePath != "") if (fullFilePath != "")