Add 2021 day 6 puzzles

This commit is contained in:
2021-12-05 12:02:05 +00:00
parent 71453e98ce
commit f1b68304bf
2 changed files with 115 additions and 0 deletions

59
2016/puzzle-09-01.cc Normal file
View File

@@ -0,0 +1,59 @@
//
// Created by Matthew Gretton-Dann on 05/12/2021.
//
#include <iostream>
#include <string>
std::string decompress(std::string const& s)
{
std::string result;
std::size_t idx{0};
while (idx < s.size()) {
if (s[idx] != '(') {
auto idx2{s.find('(', idx)};
if (idx2 == std::string::npos) {
idx2 = s.size();
};
result += s.substr(idx, idx2 - idx);
idx = idx2;
}
else {
assert(s[idx] == '(');
++idx;
std::size_t end{0};
auto length{std::stoul(s.substr(idx), &end)};
idx += end;
assert(idx < s.size());
assert(s[idx] == 'x');
++idx;
auto count{std::stoul(s.substr(idx), &end)};
idx += end;
assert(idx < s.size());
assert(s[idx] == ')');
++idx;
assert(length <= s.size());
assert(idx <= s.size() - length);
while (count-- != 0) {
result += s.substr(idx, length);
}
idx += length;
}
}
return result;
}
auto main() -> int
{
std::string line;
std::string input;
while (std::getline(std::cin, line)) {
input += line;
}
std::cout << input;
auto output{decompress(input)};
std::cout << "Output length: " << output.size() << '\n';
return 0;
}

56
2016/puzzle-09-02.cc Normal file
View File

@@ -0,0 +1,56 @@
//
// Created by Matthew Gretton-Dann on 05/12/2021.
//
#include <iostream>
#include <string>
std::size_t decompress_length(std::string const& s)
{
std::size_t result_len{0};
std::size_t idx{0};
while (idx < s.size()) {
if (s[idx] != '(') {
auto idx2{s.find('(', idx)};
if (idx2 == std::string::npos) {
idx2 = s.size();
};
result_len += idx2 - idx;
idx = idx2;
}
else {
assert(s[idx] == '(');
++idx;
std::size_t end{0};
auto length{std::stoul(s.substr(idx), &end)};
idx += end;
assert(idx < s.size());
assert(s[idx] == 'x');
++idx;
auto count{std::stoul(s.substr(idx), &end)};
idx += end;
assert(idx < s.size());
assert(s[idx] == ')');
++idx;
assert(length <= s.size());
assert(idx <= s.size() - length);
result_len += count * decompress_length(s.substr(idx, length));
idx += length;
}
}
return result_len;
}
auto main() -> int
{
std::string line;
std::string input;
while (std::getline(std::cin, line)) {
input += line;
}
auto output{decompress_length(input)};
std::cout << "Output length: " << output << '\n';
return 0;
}