refactored safety check. correct answer on p1

This commit is contained in:
Stedd 2024-12-02 23:43:48 +01:00
parent 9e34e3e4bb
commit c74be75bbe
3 changed files with 62 additions and 40 deletions

View File

@ -71,44 +71,10 @@ void day02::Calculate()
return;
}
int safeReports = 0;
bool increasing, decreasing, safe;
//std::string line;
for (std::string line; std::getline(input, line, '\n');)
{
std::istringstream iss(line);
std::vector<int> numbers(std::istream_iterator<int>{iss}, std::istream_iterator<int>());
int previousNumber = numbers.at(0);
increasing = false;
decreasing = false;
safe = true;
for (int i = 1; i < numbers.size(); i++)
{
int currentNumber = numbers.at(i);
if (i == 1)
{
if (currentNumber > previousNumber)
{
increasing = true;
}
if (currentNumber < previousNumber)
{
decreasing = true;
}
}
if (IsUnsafe(currentNumber, previousNumber, increasing, decreasing) == 1)
{
safe = false;
break;
}
previousNumber = currentNumber;
}
if (safe)
if (IsSafe(line))
{
safeReports++;
}
@ -116,14 +82,65 @@ void day02::Calculate()
std::cout << safeReports << '\n';
}
int day02::IsUnsafe(const int current, const int previous, const bool increasing, const bool decreasing)
bool day02::IsSafe(const std::string &line)
{
std::istringstream iss(line);
std::vector<int> numbers(std::istream_iterator<int>{iss}, std::istream_iterator<int>());
int previousNumber = numbers.at(numbers.size() - 1);
bool increasing = false;
bool decreasing = false;
bool safe = true;
for (int i = numbers.size() - 2; i >= 0; i--)
{
const int currentNumber = numbers.at(i);
if (i == numbers.size() - 2)
{
if (previousNumber < currentNumber)
{
increasing = true;
}
if (previousNumber > currentNumber)
{
decreasing = true;
}
}
if (SafetyChecks(currentNumber, previousNumber, increasing, decreasing) == 1)
{
// numbers.erase(numbers.begin() + i);
// if (i + 1 < numbers.size())
// {
// previousNumber = numbers.at(i + 1);
// } else
// {
// printf("wtf do i do here?");
// }
// //currentNumber = numbers.at(i);
// if (SafetyChecks(currentNumber, previousNumber, increasing, decreasing) == 1)
// {
safe = false;
return false;
// }
}
previousNumber = currentNumber;
}
if (safe)
{
return true;
}
return false;
}
int day02::SafetyChecks(const int current, const int previous, const bool increasing, const bool decreasing)
{
const int diff = abs(current - previous);
if (current < previous && increasing)
if (previous > current && increasing)
{
return 1;
}
if (current > previous && decreasing)
if (previous < current && decreasing)
{
return 1;
}

View File

@ -4,6 +4,7 @@
#ifndef DAY02_H
#define DAY02_H
#include <string>
class day02
@ -11,7 +12,9 @@ class day02
public:
static void Calculate();
static int IsUnsafe(int current, int previous, bool increasing, bool decreasing);
static bool IsSafe(const std::string &line);
static int SafetyChecks(int current, int previous, bool increasing, bool decreasing);
};
#endif //DAY02_H

View File

@ -4,3 +4,5 @@
1 2 7 8 9
9 7 6 2 1
1 3 6 7 9
55 55 57 58 59 62 65 68
22 25 27 28 30 31 32 29