-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path08-Matchsticks.cpp
More file actions
59 lines (51 loc) · 1.79 KB
/
08-Matchsticks.cpp
File metadata and controls
59 lines (51 loc) · 1.79 KB
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
// Copyright (C) 2023 Joe Baker (JoeBlakeB)
// Advent of Code 2015 - Day 08: Matchsticks
// Usage:
// scripts/cppRun.sh 2015/08-Matchsticks.cpp < 2015/inputs/08.txt
#include <iostream>
#include <vector>
#include "utils.cpp"
std::string decodeString(std::string original) {
std::string decodedString = "";
for (unsigned int i = 1; i < original.size() - 1; ++i) {
if (original[i] == '\\') {
if (original[i+1] == 'x') {
decodedString += static_cast<char>(
std::stoi(original.substr(i+2, 2), nullptr, 16));
i += 3;
} else {
decodedString += original[++i];
}
} else {
decodedString += original[i];
}
}
return decodedString;
}
std::string encodeString(std::string original) {
std::string encodedString = "\"";
for (unsigned int i = 0; i < original.size(); ++i) {
if (original[i] == '"' || original[i] == '\\') {
encodedString += '\\';
}
encodedString += original[i];
}
return encodedString + '\"';
}
int main() {
std::vector<std::string> inputLines = getInputLinesVector();
unsigned int originalSize = 0;
unsigned int decodedSize = 0;
unsigned int encodedSize = 0;
for (std::string line : inputLines) {
originalSize += line.size();
decodedSize += decodeString(line).size();
encodedSize += encodeString(line).size();
}
std::cout << "Original Length: " << originalSize << std::endl;
std::cout << "Decoded Length: " << decodedSize << " (difference: "
<< (originalSize - decodedSize) << ")" << std::endl;
std::cout << "Encoded Length: " << encodedSize << " (difference: "
<< (encodedSize - originalSize) << ")" << std::endl;
return 0;
}