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:
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:

View File

@ -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' };

View File

@ -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:

View File

@ -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<bool>& isVisited, std::stack<Point2>& otherRegionsStack, const Point2& start);

View File

@ -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:

View File

@ -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:

View File

@ -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();

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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();

View File

@ -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;
};

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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.

View File

@ -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()

View File

@ -15,11 +15,32 @@
#include <aoc/Solver.hpp>
Solver::Solver()
: part1{ 0 }, part2{ 0 }
#include <sstream>
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;
}

View File

@ -25,7 +25,7 @@ SolverEngine::SolverEngine(const std::vector<std::string>& 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 != "")