Change Solver puzzle title use and add optional input file name suffix
This commit is contained in:
parent
28baf4db3e
commit
979961d60e
|
@ -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:
|
||||||
|
|
|
@ -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' };
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -20,10 +20,12 @@
|
||||||
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;
|
||||||
|
@ -31,4 +33,7 @@ class Solver
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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 != "")
|
||||||
|
|
Loading…
Reference in New Issue