Merge branch 'cmake'
This commit is contained in:
33
include/aoc/CeresSearch.h
Normal file
33
include/aoc/CeresSearch.h
Normal file
@@ -0,0 +1,33 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "LinesSolver.h"
|
||||
|
||||
class CeresSearch :
|
||||
public LinesSolver
|
||||
{
|
||||
public:
|
||||
std::string getPuzzleName() const override;
|
||||
std::string getInputFileName() const override;
|
||||
void finish() override;
|
||||
private:
|
||||
char xmas[4] = { 'X', 'M', 'A', 'S' };
|
||||
void computeXmasCount(const Point2& start);
|
||||
void computeX_MasCount(const Point2& start);
|
||||
};
|
||||
35
include/aoc/GuardGallivant.h
Normal file
35
include/aoc/GuardGallivant.h
Normal file
@@ -0,0 +1,35 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "LinesSolver.h"
|
||||
|
||||
class GuardGallivant :
|
||||
public LinesSolver
|
||||
{
|
||||
public:
|
||||
Point2 start_{};
|
||||
std::string getPuzzleName() const override;
|
||||
std::string getInputFileName() const override;
|
||||
void processDataLine(const std::string& line) override;
|
||||
void finish() override;
|
||||
void visitPosition(const Point2& current);
|
||||
size_t turnDirection(const size_t current) const;
|
||||
size_t getStartDirectionIndex() const;
|
||||
char getStartChar() const;
|
||||
char getVisitedChar() const;
|
||||
char getObstructionChar() const;
|
||||
};
|
||||
33
include/aoc/HistorianHysteria.h
Normal file
33
include/aoc/HistorianHysteria.h
Normal file
@@ -0,0 +1,33 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <set>
|
||||
|
||||
#include <aoc/Solver.h>
|
||||
|
||||
class HistorianHysteria
|
||||
: public Solver
|
||||
{
|
||||
public:
|
||||
virtual std::string getPuzzleName() const override;
|
||||
virtual std::string getInputFileName() const override;
|
||||
virtual void processDataLine(const std::string& line) override;
|
||||
virtual void finish() override;
|
||||
private:
|
||||
std::multiset<int> left;
|
||||
std::multiset<int> right;
|
||||
};
|
||||
33
include/aoc/LinesSolver.h
Normal file
33
include/aoc/LinesSolver.h
Normal file
@@ -0,0 +1,33 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "Solver.h"
|
||||
#include "Point2.h"
|
||||
|
||||
class LinesSolver :
|
||||
public Solver
|
||||
{
|
||||
public:
|
||||
void processDataLine(const std::string& line) override;
|
||||
protected:
|
||||
std::vector<std::string> lines{};
|
||||
bool isInBounds(const Point2& point) const;
|
||||
char getPosition(const Point2& point) const;
|
||||
void setPosition(const Point2& point, const char value);
|
||||
};
|
||||
33
include/aoc/MullCharState.h
Normal file
33
include/aoc/MullCharState.h
Normal file
@@ -0,0 +1,33 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/StringState.h>
|
||||
|
||||
class MullCharState
|
||||
: public StringState
|
||||
{
|
||||
public:
|
||||
MullCharState(const char expected);
|
||||
void enter(StringStateMachine* stateMachine) override {};
|
||||
void next(StringStateMachine* stateMachine) override;
|
||||
void exit(StringStateMachine* stateMachine) override {};
|
||||
void setTransitions(StringState& successState, StringState& failState);
|
||||
private:
|
||||
char expected_;
|
||||
StringState* successState_;
|
||||
StringState* failState_;
|
||||
};
|
||||
35
include/aoc/MullData.h
Normal file
35
include/aoc/MullData.h
Normal file
@@ -0,0 +1,35 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
class MullData
|
||||
{
|
||||
public:
|
||||
MullData();
|
||||
bool getIsEnabled();
|
||||
void setIsEnabled(const bool value);
|
||||
int getFactor(const int index);
|
||||
void setFactor(const int index, const int value);
|
||||
void updateResult();
|
||||
long long int getResultPart1();
|
||||
long long int getResultPart2();
|
||||
private:
|
||||
bool isEnabled_;
|
||||
int factor1_;
|
||||
int factor2_;
|
||||
long long int part1_;
|
||||
long long int part2_;
|
||||
};
|
||||
28
include/aoc/MullDataState.h
Normal file
28
include/aoc/MullDataState.h
Normal file
@@ -0,0 +1,28 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullData.h>
|
||||
#include <aoc/StringState.h>
|
||||
|
||||
class MullDataState
|
||||
: public StringState
|
||||
{
|
||||
public:
|
||||
void setData(MullData& data);
|
||||
protected:
|
||||
MullData* data_{ nullptr };
|
||||
};
|
||||
32
include/aoc/MullDoOpenState.h
Normal file
32
include/aoc/MullDoOpenState.h
Normal file
@@ -0,0 +1,32 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullDataState.h>
|
||||
|
||||
class MullDoOpenState
|
||||
: public MullDataState
|
||||
{
|
||||
public:
|
||||
void enter(StringStateMachine* stateMachine) override {};
|
||||
void next(StringStateMachine* stateMachine) override;
|
||||
void exit(StringStateMachine* stateMachine) override {};
|
||||
void setTransitions(StringState& doState, StringState& dontState, StringState& failState);
|
||||
private:
|
||||
StringState* doState_;
|
||||
StringState* dontState_;
|
||||
StringState* failState_;
|
||||
};
|
||||
31
include/aoc/MullEntryState.h
Normal file
31
include/aoc/MullEntryState.h
Normal file
@@ -0,0 +1,31 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/StringState.h>
|
||||
|
||||
class MullEntryState
|
||||
: public StringState
|
||||
{
|
||||
public:
|
||||
void enter(StringStateMachine* stateMachine) override;
|
||||
void next(StringStateMachine* stateMachine) override;
|
||||
void exit(StringStateMachine* stateMachine) override {};
|
||||
void setTransitions(StringState& mulState, StringState& doState);
|
||||
private:
|
||||
StringState* mulState_;
|
||||
StringState* doState_;
|
||||
};
|
||||
34
include/aoc/MullFactorState.h
Normal file
34
include/aoc/MullFactorState.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullDataState.h>
|
||||
|
||||
class MullFactorState
|
||||
: public MullDataState
|
||||
{
|
||||
public:
|
||||
MullFactorState(const char expected, const int index);
|
||||
void enter(StringStateMachine* stateMachine) override;
|
||||
void next(StringStateMachine* stateMachine) override;
|
||||
void exit(StringStateMachine* stateMachine) override {};
|
||||
void setTransitions(StringState& successState, StringState& failState);
|
||||
private:
|
||||
char expected_;
|
||||
int index_;
|
||||
StringState* successState_;
|
||||
StringState* failState_;
|
||||
};
|
||||
34
include/aoc/MullItOver.h
Normal file
34
include/aoc/MullItOver.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullData.h>
|
||||
#include <aoc/MullStates.h>
|
||||
#include <aoc/Solver.h>
|
||||
|
||||
class MullItOver
|
||||
: public Solver
|
||||
{
|
||||
public:
|
||||
MullItOver();
|
||||
std::string getPuzzleName() const override;
|
||||
std::string getInputFileName() const override;
|
||||
void processDataLine(const std::string& line) override;
|
||||
void finish() override;
|
||||
private:
|
||||
MullData data_;
|
||||
MullStates states_;
|
||||
};
|
||||
41
include/aoc/MullStates.h
Normal file
41
include/aoc/MullStates.h
Normal file
@@ -0,0 +1,41 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullCharState.h>
|
||||
#include <aoc/MullDoOpenState.h>
|
||||
#include <aoc/MullEntryState.h>
|
||||
#include <aoc/MullFactorState.h>
|
||||
#include <aoc/MullToggleCloseState.h>
|
||||
|
||||
class MullStates
|
||||
{
|
||||
public:
|
||||
MullStates(MullData& data);
|
||||
MullEntryState entryState;
|
||||
MullCharState uState{ 'u' };
|
||||
MullCharState lState{ 'l' };
|
||||
MullCharState mulOpenState{ '(' };
|
||||
MullFactorState factor1State{ ',', 1 };
|
||||
MullFactorState factor2State{ ')', 2 };
|
||||
MullCharState oState{ 'o' };
|
||||
MullDoOpenState doOpenState;
|
||||
MullToggleCloseState doCloseState{ true };
|
||||
MullCharState apostropheState{ '\'' };
|
||||
MullCharState tState{ 't' };
|
||||
MullCharState dontOpenState{ '(' };
|
||||
MullToggleCloseState dontCloseState{ false };
|
||||
};
|
||||
32
include/aoc/MullToggleCloseState.h
Normal file
32
include/aoc/MullToggleCloseState.h
Normal file
@@ -0,0 +1,32 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/MullDataState.h>
|
||||
|
||||
class MullToggleCloseState
|
||||
: public MullDataState
|
||||
{
|
||||
public:
|
||||
MullToggleCloseState(const bool isEnabler);
|
||||
void enter(StringStateMachine* stateMachine) override {};
|
||||
void next(StringStateMachine* stateMachine) override;
|
||||
void exit(StringStateMachine* stateMachine) override {};
|
||||
void setTransitions(StringState& successState);
|
||||
private:
|
||||
bool isEnabler_;
|
||||
StringState* successState_;
|
||||
};
|
||||
44
include/aoc/Point2.h
Normal file
44
include/aoc/Point2.h
Normal file
@@ -0,0 +1,44 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
class Point2
|
||||
{
|
||||
public:
|
||||
static const Point2 left, right, up, down;
|
||||
static const Point2 upLeft, upRight, downLeft, downRight;
|
||||
/// <summary>
|
||||
/// The eight cardinal and diagonal directions starting down, rotating in
|
||||
/// positive direction.
|
||||
/// </summary>
|
||||
static const Point2 directions[8];
|
||||
/// <summary>
|
||||
/// The four cardinal directions starting down, rotating in positive direction.
|
||||
/// </summary>
|
||||
static const Point2 cardinalDirections[4];
|
||||
int x, y;
|
||||
Point2();
|
||||
Point2(const int x, const int y);
|
||||
bool operator==(const Point2& rhs) const;
|
||||
bool operator!=(const Point2& rhs) const;
|
||||
Point2 operator+(const Point2& rhs) const;
|
||||
Point2 operator-(const Point2& rhs) const;
|
||||
Point2 operator*(const int rhs) const;
|
||||
Point2 operator-() const;
|
||||
Point2& operator+=(const Point2& rhs);
|
||||
Point2& operator-=(const Point2& rhs);
|
||||
Point2& operator*=(const int rhs);
|
||||
};
|
||||
39
include/aoc/PrintQueue.h
Normal file
39
include/aoc/PrintQueue.h
Normal file
@@ -0,0 +1,39 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Solver.h"
|
||||
|
||||
class PrintQueue :
|
||||
public Solver
|
||||
{
|
||||
public:
|
||||
PrintQueue();
|
||||
std::string getPuzzleName() const override;
|
||||
std::string getInputFileName() const override;
|
||||
void processDataLine(const std::string& line) override;
|
||||
void finish() override;
|
||||
private:
|
||||
static const int nPages_{ 49 };
|
||||
static const int maxPageNo_{ 99 };
|
||||
bool isProcessingOrderingRules_;
|
||||
int pageNoMapIndex_;
|
||||
int pageNoMap_[maxPageNo_ + 1];
|
||||
bool orderingRules_[nPages_][nPages_];
|
||||
size_t getMapped(const int pageNo);
|
||||
void processOrderingRule(const std::string& line);
|
||||
void processUpdatePages(const std::string& line);
|
||||
};
|
||||
28
include/aoc/Program.h
Normal file
28
include/aoc/Program.h
Normal file
@@ -0,0 +1,28 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class Program
|
||||
{
|
||||
public:
|
||||
void run();
|
||||
private:
|
||||
void runSolvers();
|
||||
std::vector<std::string> getInputPaths() const;
|
||||
};
|
||||
32
include/aoc/RedNosedReportData.h
Normal file
32
include/aoc/RedNosedReportData.h
Normal file
@@ -0,0 +1,32 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include<vector>
|
||||
|
||||
#include <aoc/Slope.h>
|
||||
|
||||
class RedNosedReportData
|
||||
{
|
||||
public:
|
||||
bool isSafe{ true };
|
||||
bool canUseDampener{ true };
|
||||
bool mustSkipPrevious{ false };
|
||||
bool mustCheckSlopeReversal{ false };
|
||||
bool mustAwaitFourLevels{ false };
|
||||
Slope slope{ Slope::Unknown };
|
||||
std::vector<int> levels{};
|
||||
};
|
||||
33
include/aoc/RedNosedReports.h
Normal file
33
include/aoc/RedNosedReports.h
Normal file
@@ -0,0 +1,33 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aoc/Slope.h>
|
||||
#include <aoc/Solver.h>
|
||||
#include <aoc/RedNosedReportData.h>
|
||||
|
||||
class RedNosedReports
|
||||
: public Solver
|
||||
{
|
||||
public:
|
||||
std::string getPuzzleName() const override;
|
||||
std::string getInputFileName() const override;
|
||||
void processDataLine(const std::string& line) override;
|
||||
void finish() override;
|
||||
private:
|
||||
void checkLastLevel(const Slope sameSlope, const Slope otherSlope,
|
||||
const int delta, const int sign, RedNosedReportData& data);
|
||||
};
|
||||
18
include/aoc/Slope.h
Normal file
18
include/aoc/Slope.h
Normal file
@@ -0,0 +1,18 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
enum class Slope { Unknown, Increasing, Decreasing };
|
||||
34
include/aoc/Solver.h
Normal file
34
include/aoc/Solver.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class Solver
|
||||
{
|
||||
public:
|
||||
Solver();
|
||||
virtual ~Solver(){};
|
||||
virtual std::string getPuzzleName() const = 0;
|
||||
virtual std::string getInputFileName() 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;
|
||||
};
|
||||
34
include/aoc/SolverEngine.h
Normal file
34
include/aoc/SolverEngine.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <aoc/Solver.h>
|
||||
|
||||
class SolverEngine
|
||||
{
|
||||
public:
|
||||
SolverEngine(const std::vector<std::string>& inputPaths);
|
||||
void run(Solver& solver);
|
||||
|
||||
private:
|
||||
std::vector<std::string> inputPaths_;
|
||||
std::filesystem::path tryGetValidFullInputFilePath(const std::string& inputFileName);
|
||||
};
|
||||
31
include/aoc/StringState.h
Normal file
31
include/aoc/StringState.h
Normal file
@@ -0,0 +1,31 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <aoc/StringStateMachine.h>
|
||||
|
||||
class StringStateMachine;
|
||||
|
||||
class StringState
|
||||
{
|
||||
public:
|
||||
virtual void enter(StringStateMachine* stateMachine) = 0;
|
||||
virtual void next(StringStateMachine* stateMachine) = 0;
|
||||
virtual void exit(StringStateMachine* stateMachine) = 0;
|
||||
virtual ~StringState() {};
|
||||
};
|
||||
36
include/aoc/StringStateMachine.h
Normal file
36
include/aoc/StringStateMachine.h
Normal file
@@ -0,0 +1,36 @@
|
||||
// Solutions to the Advent Of Code 2024.
|
||||
// Copyright (C) 2024 Stefan Müller
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free Software
|
||||
// Foundation, either version 3 of the License, or (at your option) any later
|
||||
// version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License along with
|
||||
// this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <aoc/StringState.h>
|
||||
|
||||
class StringState;
|
||||
|
||||
class StringStateMachine
|
||||
{
|
||||
public:
|
||||
StringStateMachine(const std::string& line, StringState& entryState);
|
||||
void run();
|
||||
char getCurrent() const;
|
||||
void setState(StringState& state);
|
||||
private:
|
||||
std::string line_;
|
||||
StringState* entryState_;
|
||||
StringState* currentState_;
|
||||
char current_;
|
||||
};
|
||||
Reference in New Issue
Block a user