Day6 Question2 (Late)
This commit is contained in:
83
Day6/Question2/main.cpp
Normal file
83
Day6/Question2/main.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#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) {
|
||||
std::vector<std::string> currentOperationLines{};
|
||||
bool isAddition = lineOfOperations[PositionOfAnOperation] == '+';
|
||||
uint64_t thisOperationsResult = 0, number = 0,
|
||||
NextPositionOfAnOperation = startPositionOfOperations[std::min(
|
||||
++count, startPositionOfOperations.size())];
|
||||
|
||||
// Storing these will ease our work
|
||||
for (std::string line : lines) {
|
||||
currentOperationLines.push_back(
|
||||
line.substr(PositionOfAnOperation,
|
||||
NextPositionOfAnOperation - PositionOfAnOperation));
|
||||
}
|
||||
|
||||
// Building the numbers like this was the easiest way, however I don't think
|
||||
// its efficient by any means
|
||||
for (uint16_t index = 0; index < currentOperationLines.begin()->length();
|
||||
index++) {
|
||||
std::string builtNumber = "";
|
||||
for (std::string subLine : currentOperationLines) {
|
||||
if (subLine[index] == ' ') {
|
||||
continue;
|
||||
}
|
||||
builtNumber.push_back(subLine[index]);
|
||||
}
|
||||
|
||||
// Empty line, ignore
|
||||
if (builtNumber.empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isAddition) {
|
||||
thisOperationsResult += std::stoull(builtNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (thisOperationsResult != 0) {
|
||||
thisOperationsResult *= std::stoull(builtNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
thisOperationsResult = std::stoull(builtNumber);
|
||||
}
|
||||
|
||||
total += thisOperationsResult;
|
||||
}
|
||||
std::cout << total << std::endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user