-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday25.cpp
117 lines (93 loc) · 2.03 KB
/
day25.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using namespace std;
#include <iostream>
#include <string>
#include <utility>
#include <map>
#include <set>
#include <algorithm>
#include <vector>
#include <cmath>
#include "Helpers/HelperFunctions.h"
int main() {
cout << "Day 25" << endl;
ifstream file(R"(C:\Users\gwen\Documents\2_Programming\Advent of Code\Advent of Code 2022\inputs\day25.txt)");
string str;
long long sum = 0;
while (getline(file, str)) {
long long num = 0;
for (int i = 0; i < str.length(); i++) {
long long power = pow(5, str.length() - i - 1);
long long value;
switch (str[i]) {
case '2':
value = 2;
break;
case '1':
value = 1;
break;
case '0':
value = 0;
break;
case '-':
value = -1;
break;
case '=':
value = -2;
break;
}
num += power * value;
}
sum += num;
}
cout << "SUM: " << sum << endl;
vector<long long> values;
long long multiplier = 1;
values.push_back(multiplier);
while (multiplier < sum) {
multiplier *= 5;
values.push_back(multiplier);
}
vector<int> divisioned;
while (multiplier > 0) {
int amountIn = (sum / multiplier);
divisioned.push_back(amountIn);
sum -= amountIn * multiplier;
multiplier /= 5;
}
reverse(divisioned.begin(), divisioned.end());
vector<int> shifted;
int carryOver = 0;
for (auto &it : divisioned) {
int currNum = it + carryOver;
if (currNum <= 2) {
shifted.push_back(currNum);
carryOver = 0;
} else {
carryOver = 1;
shifted.push_back(currNum - 5);
}
}
cout << "Answer: ";
reverse(shifted.begin(), shifted.end());
for (auto &it : shifted) {
switch (it) {
case -2:
cout << '=';
break;
case -1:
cout << '-';
break;
case 0:
cout << '0';
break;
case 1:
cout << '1';
break;
case 2:
cout << '2';
break;
}
}
cout << endl;
return 0;
}