Files
AdventOfCode/2024/day3.hpp

105 lines
3.0 KiB
C++

#include "aoc.hpp"
#include <cctype>
class Day03 : public AOCDay
{
public:
Day03() {}
~Day03() {}
int Day() override {return 3;}
int PartOne(File& f) override
{
int result = 0;
for (std::string input : f.Lines())
{
// for each char
bool searchingParams = false;
bool firstComma = false;
bool closeBrace = false;
std::string leftS;
int left = -1;
std::string rightS;
int right = -1;
for (int i = 0; i < input.length(); i++)
{
if (closeBrace)
{
std::cout << "mul(" << left << "," << right << ")=" << left*right << std::endl;
if (left != -1 && right != -1)
{
result += left * right;
} else
{
std::cout << "Failed to parse" << std::endl;
}
searchingParams = false;
firstComma = false;
closeBrace = false;
leftS = "";
left = 0;
rightS = "";
right = 0;
i -= 2;
continue;
}
if (searchingParams)
{
if (!firstComma)
{
if (input[i] == ',')
{
left = std::atoi(leftS.c_str());
firstComma = true;
continue;
}
leftS += input[i];
}
if (!closeBrace && firstComma)
{
if (input[i] == ')')
{
right = std::atoi(rightS.c_str());
closeBrace = true;
continue;
}
rightS += input[i];
}
if (std::isdigit(input[i]) == 0)
{
searchingParams = false;
firstComma = false;
closeBrace = false;
leftS = "";
left = 0;
rightS = "";
right = 0;
std::cout << "found bad char : " << input[i] << " IsDigit? : " << std::isdigit(input[i]) << std::endl;
continue;
}
}
if (input[i] == 'm' && input[i + 1] == 'u' && input[i + 2] == 'l' && input[i + 3] == '(')
{
i = i + 3;
continue;
searchingParams = true;
}
}
}
return result;
}
int PartTwo(File& f) override
{
}
};
ADD_AOC_DAY(Day03);