Add solution for "Day 2: Red-Nosed Reports", part 1
This commit is contained in:
parent
7693c64037
commit
fe67687bf7
|
@ -131,12 +131,14 @@
|
||||||
<ClCompile Include="AdventOfCode2024.cpp" />
|
<ClCompile Include="AdventOfCode2024.cpp" />
|
||||||
<ClCompile Include="HistorianHysteria.cpp" />
|
<ClCompile Include="HistorianHysteria.cpp" />
|
||||||
<ClCompile Include="Program.cpp" />
|
<ClCompile Include="Program.cpp" />
|
||||||
|
<ClCompile Include="RedNosedReports.cpp" />
|
||||||
<ClCompile Include="Solver.cpp" />
|
<ClCompile Include="Solver.cpp" />
|
||||||
<ClCompile Include="SolverEngine.cpp" />
|
<ClCompile Include="SolverEngine.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="HistorianHysteria.h" />
|
<ClInclude Include="HistorianHysteria.h" />
|
||||||
<ClInclude Include="Program.h" />
|
<ClInclude Include="Program.h" />
|
||||||
|
<ClInclude Include="RedNosedReports.h" />
|
||||||
<ClInclude Include="Solver.h" />
|
<ClInclude Include="Solver.h" />
|
||||||
<ClInclude Include="SolverEngine.h" />
|
<ClInclude Include="SolverEngine.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<ClCompile Include="HistorianHysteria.cpp">
|
<ClCompile Include="HistorianHysteria.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="RedNosedReports.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="SolverEngine.h">
|
<ClInclude Include="SolverEngine.h">
|
||||||
|
@ -44,5 +47,8 @@
|
||||||
<ClInclude Include="HistorianHysteria.h">
|
<ClInclude Include="HistorianHysteria.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="RedNosedReports.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -20,6 +20,7 @@
|
||||||
#include "SolverEngine.h"
|
#include "SolverEngine.h"
|
||||||
|
|
||||||
#include "HistorianHysteria.h"
|
#include "HistorianHysteria.h"
|
||||||
|
#include "RedNosedReports.h"
|
||||||
|
|
||||||
void Program::run()
|
void Program::run()
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,7 @@ void Program::runSolvers()
|
||||||
{
|
{
|
||||||
SolverEngine solverEngine{ getInputPaths() };
|
SolverEngine solverEngine{ getInputPaths() };
|
||||||
solverEngine.run(*std::make_unique<HistorianHysteria>());
|
solverEngine.run(*std::make_unique<HistorianHysteria>());
|
||||||
|
solverEngine.run(*std::make_unique<RedNosedReports>());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> Program::getInputPaths() const
|
std::vector<std::string> Program::getInputPaths() const
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
// 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/>.
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "RedNosedReports.h"
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
std::string RedNosedReports::getPuzzleName() const
|
||||||
|
{
|
||||||
|
return "Day 2: Red-Nosed Reports";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string RedNosedReports::getInputFileName() const
|
||||||
|
{
|
||||||
|
return "red-nosed_reports.txt";
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedNosedReports::processDataLine(const std::string& line)
|
||||||
|
{
|
||||||
|
auto isSafe{ true };
|
||||||
|
auto slope{ Slope::Unknown };
|
||||||
|
|
||||||
|
std::stringstream stream{ line };
|
||||||
|
std::string token;
|
||||||
|
std::getline(stream, token, ' ');
|
||||||
|
auto prev{ std::stoi(token) };
|
||||||
|
|
||||||
|
while (isSafe && std::getline(stream, token, ' '))
|
||||||
|
{
|
||||||
|
auto next{ std::stoi(token) };
|
||||||
|
auto delta{ next - prev };
|
||||||
|
if (delta == 0 || delta > 3 || delta < -3
|
||||||
|
|| (delta > 0 && slope == Slope::Decreasing)
|
||||||
|
|| (delta < 0 && slope == Slope::Increasing))
|
||||||
|
{
|
||||||
|
isSafe = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prev = next;
|
||||||
|
if (slope == Slope::Unknown)
|
||||||
|
{
|
||||||
|
slope = delta > 0 ? Slope::Increasing : Slope::Decreasing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isSafe)
|
||||||
|
{
|
||||||
|
part1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RedNosedReports::finish()
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
// 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 RedNosedReports :
|
||||||
|
public Solver
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string getPuzzleName() const override;
|
||||||
|
std::string getInputFileName() const override;
|
||||||
|
void processDataLine(const std::string& line) override;
|
||||||
|
void finish() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class Slope { Unknown, Increasing, Decreasing };
|
Loading…
Reference in New Issue