Initial commit
This commit is contained in:
96
2022/city/12/expresii/expresii.cpp
Normal file
96
2022/city/12/expresii/expresii.cpp
Normal file
@@ -0,0 +1,96 @@
|
||||
#include <fstream>
|
||||
#include <deque>
|
||||
#include <unordered_map>
|
||||
using namespace std;
|
||||
|
||||
ifstream input_stream;
|
||||
ofstream output_stream;
|
||||
unordered_map<char, int> numbers_map = {{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
|
||||
|
||||
|
||||
int64_t evaluateNum(string num) {
|
||||
int64_t res = 0;
|
||||
const int lim = num.length();
|
||||
|
||||
|
||||
for (int i = 0; i < lim - 1; i++) {
|
||||
if (numbers_map[num[i]] >= numbers_map[num[i + 1]]) {
|
||||
res += numbers_map[num[i]];
|
||||
} else {
|
||||
res -= numbers_map[num[i]];
|
||||
}
|
||||
}
|
||||
res += numbers_map[num[lim - 1]];
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main() {
|
||||
input_stream.open("expresii.in");
|
||||
output_stream.open("expresii.out");
|
||||
|
||||
string expression;
|
||||
input_stream >> expression;
|
||||
|
||||
deque<int64_t> numbers;
|
||||
deque<char> operations;
|
||||
|
||||
string currNumber = "";
|
||||
const int lim = expression.length();
|
||||
for (int i = 0; i < lim; i++) {
|
||||
if (numbers_map[expression[i]] > 0) {
|
||||
currNumber += expression[i];
|
||||
} else {
|
||||
numbers.push_back(evaluateNum(currNumber));
|
||||
operations.push_back(expression[i]);
|
||||
currNumber = "";
|
||||
}
|
||||
}
|
||||
numbers.push_back(evaluateNum(currNumber));
|
||||
|
||||
|
||||
// Evaluate multiplications
|
||||
int pos = 0;
|
||||
for (auto it = operations.begin(); it != operations.end(); it++) {
|
||||
if (*it == '*') {
|
||||
auto num1 = numbers.begin();
|
||||
advance(num1, pos);
|
||||
auto num2 = numbers.begin();
|
||||
advance(num2, pos + 1);
|
||||
|
||||
*num1 = *num2 * *num1;
|
||||
numbers.erase(num2);
|
||||
pos--;
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
|
||||
|
||||
// Evaluate other stuff
|
||||
pos = 0;
|
||||
int64_t res = numbers.front();
|
||||
for (auto it = operations.begin(); it != operations.end(); it++) {
|
||||
if (*it == '*') {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto num = numbers.begin();
|
||||
advance(num, pos + 1);
|
||||
|
||||
if (*it == '+') {
|
||||
res += *num;
|
||||
} else {
|
||||
res -= *num;
|
||||
}
|
||||
|
||||
pos++;
|
||||
}
|
||||
|
||||
output_stream << res << endl;
|
||||
|
||||
input_stream.close();
|
||||
output_stream.close();
|
||||
return 0;
|
||||
}
|
||||
3
2022/city/12/expresii/tests/1-expresii.in
Normal file
3
2022/city/12/expresii/tests/1-expresii.in
Normal file
@@ -0,0 +1,3 @@
|
||||
XIV*MMCIX-MMXXII+V*XL-CDXLIV
|
||||
|
||||
|
||||
1
2022/city/12/expresii/tests/1-expresii.ok
Normal file
1
2022/city/12/expresii/tests/1-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
27260
|
||||
1
2022/city/12/expresii/tests/10-expresii.in
Normal file
1
2022/city/12/expresii/tests/10-expresii.in
Normal file
@@ -0,0 +1 @@
|
||||
CCXXXIX+MDLVIII-MCMXLIX*MMMMCDXXXIV+DLXXXIX+MMMMCDXLIX*MMXXXVIII-MDLXIX*CDXCIX-MMMMMMCDXLIV
|
||||
1
2022/city/12/expresii/tests/10-expresii.ok
Normal file
1
2022/city/12/expresii/tests/10-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
-361793
|
||||
3
2022/city/12/expresii/tests/2-expresii.in
Normal file
3
2022/city/12/expresii/tests/2-expresii.in
Normal file
@@ -0,0 +1,3 @@
|
||||
I+V-VI*VII-VIII+IX-X+II-III+IV*X
|
||||
|
||||
|
||||
1
2022/city/12/expresii/tests/2-expresii.ok
Normal file
1
2022/city/12/expresii/tests/2-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
-6
|
||||
4
2022/city/12/expresii/tests/3-expresii.in
Normal file
4
2022/city/12/expresii/tests/3-expresii.in
Normal file
@@ -0,0 +1,4 @@
|
||||
I*V-VI-VII+VIII+IX-X-II-III*IV*X-M
|
||||
|
||||
|
||||
|
||||
1
2022/city/12/expresii/tests/3-expresii.ok
Normal file
1
2022/city/12/expresii/tests/3-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
-1123
|
||||
1
2022/city/12/expresii/tests/4-expresii.in
Normal file
1
2022/city/12/expresii/tests/4-expresii.in
Normal file
@@ -0,0 +1 @@
|
||||
XXXI+XXXII-XXXIII+XXXVII*XXXVIII+XXXIX+XL+XXXIV*XXXV+XXXVI
|
||||
1
2022/city/12/expresii/tests/4-expresii.ok
Normal file
1
2022/city/12/expresii/tests/4-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
2741
|
||||
1
2022/city/12/expresii/tests/5-expresii.in
Normal file
1
2022/city/12/expresii/tests/5-expresii.in
Normal file
@@ -0,0 +1 @@
|
||||
XXXI*XXXII+XXXIII+XXXVII-XXXVIII*XXXIX+XL+XXXIV-XXXV*XXXVI
|
||||
1
2022/city/12/expresii/tests/5-expresii.ok
Normal file
1
2022/city/12/expresii/tests/5-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
-1606
|
||||
2
2022/city/12/expresii/tests/6-expresii.in
Normal file
2
2022/city/12/expresii/tests/6-expresii.in
Normal file
@@ -0,0 +1,2 @@
|
||||
MMMMMMCDXLIV
|
||||
|
||||
1
2022/city/12/expresii/tests/6-expresii.ok
Normal file
1
2022/city/12/expresii/tests/6-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
6444
|
||||
1
2022/city/12/expresii/tests/7-expresii.in
Normal file
1
2022/city/12/expresii/tests/7-expresii.in
Normal file
@@ -0,0 +1 @@
|
||||
D
|
||||
1
2022/city/12/expresii/tests/7-expresii.ok
Normal file
1
2022/city/12/expresii/tests/7-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
500
|
||||
2
2022/city/12/expresii/tests/8-expresii.in
Normal file
2
2022/city/12/expresii/tests/8-expresii.in
Normal file
@@ -0,0 +1,2 @@
|
||||
LXIV+MXCVII*MDCVIII*DCCCLXIV-CMLXIX+MCDLXV-MMDCCCXCVII*XCIX+CDXLIV
|
||||
|
||||
1
2022/city/12/expresii/tests/8-expresii.ok
Normal file
1
2022/city/12/expresii/tests/8-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
1523789465
|
||||
1
2022/city/12/expresii/tests/9-expresii.in
Normal file
1
2022/city/12/expresii/tests/9-expresii.in
Normal file
@@ -0,0 +1 @@
|
||||
CCXLIX-CMXCIX*DLXXXIV-MXCVIII-XXVI*LXII-CLXXXIV-MMMXLI+MMMCCXLIX
|
||||
1
2022/city/12/expresii/tests/9-expresii.ok
Normal file
1
2022/city/12/expresii/tests/9-expresii.ok
Normal file
@@ -0,0 +1 @@
|
||||
-585853
|
||||
10
2022/city/12/expresii/tests/teste.txt
Normal file
10
2022/city/12/expresii/tests/teste.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
Reference in New Issue
Block a user