Part 1
挺單純的,大致流程如下:
填滿 `numbers` 的陣列
並且紀錄每個 column 對應的運算子
遍歷每個 column 針對不同運算子作不同操作並求最終值
把每個 column 的最終值加起來
寫成程式碼就是
#include <cctype>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::ifstream inputFile("input-day6");
std::string line;
std::vector<std::vector<int>> numbers;
std::vector<char> operators;
while (std::getline(inputFile, line)) {
int number;
char oper;
std::vector<int> line_numbers;
// Read numbers in line
if (std::isdigit(line[0])) {
std::stringstream ss(line);
while (ss >> number) {
line_numbers.push_back(number);
}
numbers.push_back(line_numbers);
} else {
// Read operators in line
std::stringstream ss(line);
while (ss >> oper) {
operators.push_back(oper);
}
}
}
int n = operators.size();
long long result = 0;
// Performing operations;
for (int i = 0; i < n; i++) {
long long temp = numbers[0][i];
for (int row = 1; row < numbers.size(); row++) {
switch (operators[i]) {
case '+':
temp += numbers[row][i];
break;
case '*':
temp *= numbers[row][i];
break;
}
}
result += temp;
}
std::cout << result << std::endl;
}Part 2
幾乎要把上面的程式碼重寫。
result = 0
for ch : 從右到左一個一個字元讀取
cur_number : 由上到下組合起來
if 最後一個是運算子
result = 針對不同運算子操作,算出最終值
寫成程式碼就是
#include <cctype>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::ifstream inputFile("input-day6");
std::string line;
std::vector<std::string> inputLines;
while (std::getline(inputFile, line)) {
inputLines.push_back(line);
}
int lineSize = inputLines[0].size();
int inputSize = inputLines.size();
std::vector<long long> cur_line_numbers;
long long result = 0;
for (int col = lineSize-1; col >= 0; col--) {
char dig = ' ';
long long cur_number = 0;
for (int row = 0; row < inputLines.size(); row++) {
if (isdigit(inputLines[row][col])) {
cur_number *= 10;
cur_number += inputLines[row][col] - '0';
}
}
if (cur_number != 0)
cur_line_numbers.push_back(cur_number);
if (inputLines[inputSize-1][col] != ' ') {
char oper = inputLines[inputSize-1][col];
long long temp = cur_line_numbers[0];
switch (oper) {
case '+':
for (int i = 1; i < cur_line_numbers.size(); i++) {
temp += cur_line_numbers[i];
}
break;
case '*':
for (int i = 1; i < cur_line_numbers.size(); i++) {
temp *= cur_line_numbers[i];
}
break;
default:
std::cout << "Unknown Operations!\n";
exit(-1);
}
result += temp;
cur_line_numbers.clear();
std::cout << result << std::endl;
}
}
std::cout << result << std::endl;
}