62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
#include <algorithm>
|
|
#include <cstdint>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
int main() {
|
|
std::fstream input("input");
|
|
std::string currentLine = "", lineOfOperations = "";
|
|
std::vector<std::string> lines{};
|
|
std::vector<uint64_t> results{};
|
|
std::vector<uint64_t> startPositionOfOperations{};
|
|
|
|
while (std::getline(input, currentLine, '\n')) {
|
|
lines.push_back(currentLine);
|
|
}
|
|
|
|
// Just removing the operations for a for loop below
|
|
lineOfOperations = lines.back();
|
|
lines.pop_back();
|
|
|
|
// Since only 3 possibilities are '+', '*', and ' '
|
|
uint64_t count = 0;
|
|
for (char character : lineOfOperations) {
|
|
if (character != ' ') {
|
|
startPositionOfOperations.push_back(count);
|
|
}
|
|
count++;
|
|
}
|
|
|
|
// Now we have each coloums length :^)
|
|
count = 0;
|
|
uint64_t total = 0;
|
|
for (uint64_t PositionOfAnOperation : startPositionOfOperations) {
|
|
bool isAddition = lineOfOperations[PositionOfAnOperation] == '+';
|
|
uint64_t thisOperationsResult = 0, number = 0,
|
|
NextPositionOfAnOperation = startPositionOfOperations[std::min(
|
|
++count, startPositionOfOperations.size())];
|
|
|
|
for (std::string line : lines) {
|
|
number = std::stoull(
|
|
line.substr(PositionOfAnOperation,
|
|
PositionOfAnOperation - NextPositionOfAnOperation));
|
|
if (isAddition) {
|
|
thisOperationsResult += number;
|
|
continue;
|
|
}
|
|
|
|
if (thisOperationsResult == 0) {
|
|
thisOperationsResult = number;
|
|
continue;
|
|
}
|
|
thisOperationsResult *= number;
|
|
}
|
|
|
|
total += thisOperationsResult;
|
|
}
|
|
std::cout << total << std::endl;
|
|
return 0;
|
|
}
|