From 00a246c683596abd2e20823932ce7bb0fb3e69ab Mon Sep 17 00:00:00 2001 From: Jos van Goor Date: Mon, 5 Dec 2022 20:26:41 +0100 Subject: [PATCH] Advent of Code 2022 day 5 --- advent_of_code_2022/day5/input.txt | 512 +++++++++++++++++++++++++++++ advent_of_code_2022/day5/main1.cc | 81 +++++ advent_of_code_2022/day5/main2.cc | 81 +++++ 3 files changed, 674 insertions(+) create mode 100644 advent_of_code_2022/day5/input.txt create mode 100644 advent_of_code_2022/day5/main1.cc create mode 100644 advent_of_code_2022/day5/main2.cc diff --git a/advent_of_code_2022/day5/input.txt b/advent_of_code_2022/day5/input.txt new file mode 100644 index 0000000..2c22964 --- /dev/null +++ b/advent_of_code_2022/day5/input.txt @@ -0,0 +1,512 @@ + [M] [S] [S] + [M] [N] [L] [T] [Q] +[G] [P] [C] [F] [G] [T] +[B] [J] [D] [P] [V] [F] [F] +[D] [D] [G] [C] [Z] [H] [B] [G] +[C] [G] [Q] [L] [N] [D] [M] [D] [Q] +[P] [V] [S] [S] [B] [B] [Z] [M] [C] +[R] [H] [N] [P] [J] [Q] [B] [C] [F] + 1 2 3 4 5 6 7 8 9 + +move 1 from 7 to 4 +move 3 from 4 to 7 +move 4 from 3 to 4 +move 5 from 6 to 9 +move 1 from 8 to 1 +move 2 from 3 to 2 +move 3 from 4 to 6 +move 1 from 3 to 6 +move 9 from 7 to 1 +move 1 from 2 to 4 +move 3 from 4 to 9 +move 4 from 9 to 8 +move 6 from 8 to 2 +move 1 from 8 to 6 +move 1 from 4 to 1 +move 11 from 1 to 7 +move 1 from 4 to 7 +move 7 from 2 to 5 +move 5 from 6 to 3 +move 2 from 4 to 3 +move 2 from 5 to 9 +move 1 from 8 to 6 +move 3 from 1 to 5 +move 2 from 6 to 9 +move 1 from 4 to 8 +move 2 from 2 to 1 +move 7 from 5 to 9 +move 6 from 3 to 6 +move 1 from 2 to 5 +move 1 from 3 to 8 +move 12 from 7 to 3 +move 1 from 1 to 8 +move 2 from 1 to 9 +move 20 from 9 to 5 +move 1 from 1 to 7 +move 5 from 5 to 3 +move 1 from 8 to 7 +move 2 from 8 to 3 +move 2 from 6 to 5 +move 1 from 6 to 4 +move 18 from 3 to 2 +move 1 from 4 to 2 +move 1 from 7 to 9 +move 1 from 1 to 9 +move 1 from 6 to 1 +move 8 from 5 to 2 +move 1 from 1 to 6 +move 19 from 5 to 2 +move 5 from 2 to 6 +move 2 from 9 to 7 +move 20 from 2 to 1 +move 1 from 9 to 4 +move 8 from 6 to 2 +move 5 from 1 to 3 +move 27 from 2 to 1 +move 34 from 1 to 7 +move 1 from 2 to 6 +move 2 from 3 to 1 +move 1 from 4 to 9 +move 1 from 2 to 6 +move 2 from 1 to 7 +move 1 from 6 to 7 +move 1 from 9 to 3 +move 2 from 6 to 3 +move 1 from 6 to 4 +move 5 from 3 to 4 +move 5 from 4 to 2 +move 4 from 1 to 4 +move 4 from 1 to 4 +move 2 from 3 to 6 +move 1 from 6 to 9 +move 25 from 7 to 5 +move 1 from 6 to 4 +move 17 from 5 to 2 +move 14 from 7 to 6 +move 1 from 7 to 3 +move 1 from 9 to 3 +move 10 from 2 to 3 +move 2 from 2 to 9 +move 12 from 3 to 5 +move 18 from 5 to 8 +move 1 from 4 to 2 +move 5 from 2 to 1 +move 1 from 5 to 3 +move 3 from 2 to 1 +move 1 from 2 to 7 +move 2 from 2 to 6 +move 9 from 6 to 7 +move 16 from 8 to 2 +move 6 from 7 to 3 +move 2 from 8 to 9 +move 1 from 1 to 8 +move 16 from 2 to 6 +move 1 from 8 to 3 +move 2 from 1 to 2 +move 1 from 9 to 3 +move 7 from 4 to 1 +move 7 from 3 to 7 +move 9 from 7 to 8 +move 1 from 5 to 6 +move 2 from 9 to 7 +move 1 from 9 to 5 +move 11 from 6 to 8 +move 1 from 3 to 1 +move 1 from 4 to 2 +move 2 from 8 to 5 +move 3 from 5 to 8 +move 2 from 1 to 9 +move 5 from 1 to 4 +move 3 from 4 to 1 +move 1 from 3 to 2 +move 3 from 2 to 1 +move 1 from 9 to 1 +move 1 from 2 to 5 +move 2 from 4 to 7 +move 20 from 8 to 5 +move 1 from 9 to 7 +move 11 from 6 to 1 +move 17 from 1 to 5 +move 1 from 8 to 2 +move 7 from 5 to 8 +move 1 from 4 to 5 +move 2 from 1 to 2 +move 2 from 8 to 4 +move 4 from 7 to 6 +move 2 from 6 to 8 +move 2 from 1 to 2 +move 1 from 1 to 4 +move 4 from 8 to 9 +move 2 from 1 to 9 +move 3 from 8 to 1 +move 25 from 5 to 2 +move 23 from 2 to 1 +move 1 from 7 to 1 +move 6 from 9 to 8 +move 6 from 8 to 3 +move 3 from 6 to 2 +move 10 from 1 to 2 +move 1 from 6 to 3 +move 2 from 3 to 6 +move 2 from 3 to 2 +move 2 from 6 to 8 +move 1 from 4 to 6 +move 14 from 1 to 9 +move 2 from 3 to 4 +move 14 from 2 to 4 +move 1 from 6 to 9 +move 17 from 4 to 3 +move 1 from 8 to 6 +move 2 from 7 to 2 +move 1 from 4 to 2 +move 1 from 5 to 9 +move 9 from 2 to 4 +move 17 from 3 to 7 +move 3 from 4 to 2 +move 1 from 8 to 3 +move 4 from 5 to 7 +move 1 from 3 to 6 +move 1 from 4 to 5 +move 14 from 7 to 9 +move 2 from 1 to 9 +move 3 from 2 to 1 +move 1 from 2 to 5 +move 1 from 3 to 7 +move 4 from 1 to 2 +move 2 from 6 to 7 +move 3 from 9 to 8 +move 4 from 2 to 4 +move 17 from 9 to 7 +move 1 from 2 to 8 +move 8 from 9 to 6 +move 1 from 8 to 2 +move 19 from 7 to 9 +move 9 from 4 to 2 +move 5 from 7 to 3 +move 3 from 5 to 9 +move 6 from 2 to 5 +move 1 from 9 to 4 +move 3 from 2 to 9 +move 25 from 9 to 5 +move 1 from 3 to 6 +move 2 from 5 to 8 +move 6 from 6 to 7 +move 1 from 3 to 4 +move 2 from 3 to 4 +move 1 from 8 to 2 +move 2 from 2 to 9 +move 2 from 8 to 3 +move 5 from 7 to 6 +move 3 from 7 to 9 +move 7 from 5 to 8 +move 2 from 3 to 5 +move 1 from 3 to 5 +move 1 from 6 to 2 +move 6 from 9 to 5 +move 1 from 9 to 2 +move 1 from 6 to 9 +move 2 from 5 to 6 +move 2 from 9 to 8 +move 11 from 8 to 1 +move 2 from 5 to 9 +move 3 from 6 to 5 +move 1 from 4 to 7 +move 5 from 5 to 7 +move 1 from 4 to 8 +move 7 from 7 to 2 +move 12 from 5 to 2 +move 10 from 1 to 8 +move 1 from 9 to 6 +move 3 from 8 to 1 +move 1 from 1 to 6 +move 10 from 2 to 3 +move 8 from 8 to 7 +move 1 from 9 to 8 +move 2 from 3 to 5 +move 14 from 5 to 8 +move 1 from 3 to 2 +move 3 from 8 to 1 +move 3 from 8 to 4 +move 3 from 2 to 4 +move 5 from 6 to 4 +move 8 from 7 to 9 +move 6 from 8 to 7 +move 1 from 5 to 7 +move 6 from 2 to 9 +move 4 from 4 to 6 +move 4 from 4 to 9 +move 3 from 9 to 3 +move 1 from 8 to 6 +move 1 from 5 to 6 +move 2 from 7 to 2 +move 1 from 3 to 4 +move 3 from 4 to 1 +move 3 from 4 to 3 +move 5 from 6 to 4 +move 4 from 3 to 8 +move 1 from 6 to 4 +move 8 from 3 to 2 +move 2 from 8 to 5 +move 11 from 9 to 7 +move 9 from 1 to 9 +move 2 from 7 to 3 +move 1 from 6 to 8 +move 1 from 6 to 5 +move 5 from 9 to 8 +move 3 from 9 to 7 +move 2 from 9 to 1 +move 2 from 3 to 7 +move 12 from 7 to 1 +move 2 from 8 to 9 +move 5 from 4 to 5 +move 4 from 9 to 4 +move 1 from 1 to 3 +move 7 from 1 to 3 +move 7 from 5 to 6 +move 1 from 9 to 1 +move 1 from 5 to 1 +move 5 from 7 to 8 +move 4 from 6 to 7 +move 5 from 1 to 8 +move 1 from 4 to 3 +move 12 from 8 to 7 +move 2 from 2 to 4 +move 2 from 8 to 9 +move 3 from 8 to 2 +move 2 from 6 to 7 +move 4 from 7 to 8 +move 1 from 6 to 8 +move 4 from 3 to 2 +move 15 from 7 to 8 +move 1 from 7 to 6 +move 3 from 3 to 5 +move 2 from 3 to 4 +move 5 from 2 to 5 +move 3 from 1 to 5 +move 4 from 5 to 6 +move 4 from 5 to 9 +move 1 from 5 to 7 +move 4 from 9 to 4 +move 2 from 2 to 9 +move 2 from 5 to 2 +move 2 from 2 to 1 +move 3 from 4 to 9 +move 2 from 9 to 4 +move 2 from 8 to 5 +move 2 from 5 to 2 +move 8 from 2 to 4 +move 2 from 1 to 3 +move 2 from 3 to 5 +move 3 from 6 to 9 +move 2 from 6 to 1 +move 2 from 1 to 4 +move 1 from 2 to 4 +move 1 from 5 to 7 +move 2 from 2 to 7 +move 18 from 4 to 2 +move 1 from 5 to 9 +move 2 from 7 to 9 +move 18 from 8 to 4 +move 1 from 7 to 8 +move 22 from 4 to 8 +move 6 from 2 to 6 +move 3 from 6 to 8 +move 3 from 6 to 4 +move 3 from 4 to 7 +move 3 from 7 to 1 +move 14 from 2 to 3 +move 10 from 3 to 2 +move 27 from 8 to 1 +move 1 from 7 to 6 +move 1 from 3 to 7 +move 2 from 2 to 8 +move 2 from 9 to 8 +move 18 from 1 to 4 +move 6 from 1 to 5 +move 10 from 4 to 7 +move 1 from 3 to 7 +move 4 from 7 to 2 +move 3 from 9 to 7 +move 1 from 6 to 5 +move 1 from 2 to 7 +move 2 from 5 to 6 +move 2 from 6 to 5 +move 3 from 5 to 1 +move 6 from 1 to 3 +move 4 from 5 to 9 +move 11 from 2 to 9 +move 2 from 1 to 6 +move 3 from 4 to 6 +move 5 from 7 to 3 +move 2 from 6 to 1 +move 2 from 1 to 5 +move 1 from 8 to 2 +move 1 from 1 to 8 +move 1 from 6 to 4 +move 2 from 4 to 5 +move 4 from 5 to 9 +move 11 from 3 to 6 +move 1 from 3 to 6 +move 8 from 6 to 5 +move 1 from 3 to 5 +move 4 from 4 to 8 +move 21 from 9 to 6 +move 2 from 9 to 5 +move 1 from 9 to 3 +move 1 from 2 to 6 +move 7 from 8 to 6 +move 12 from 6 to 5 +move 1 from 8 to 2 +move 10 from 6 to 7 +move 15 from 7 to 2 +move 2 from 7 to 3 +move 13 from 6 to 8 +move 9 from 5 to 1 +move 12 from 5 to 3 +move 1 from 2 to 3 +move 1 from 9 to 7 +move 9 from 3 to 4 +move 3 from 4 to 6 +move 1 from 7 to 6 +move 6 from 4 to 1 +move 2 from 5 to 2 +move 6 from 1 to 8 +move 9 from 8 to 6 +move 7 from 3 to 2 +move 1 from 2 to 9 +move 9 from 6 to 1 +move 13 from 1 to 7 +move 4 from 8 to 5 +move 2 from 7 to 1 +move 3 from 6 to 4 +move 3 from 5 to 8 +move 3 from 2 to 6 +move 1 from 5 to 3 +move 1 from 3 to 4 +move 1 from 9 to 8 +move 3 from 8 to 7 +move 12 from 2 to 9 +move 10 from 7 to 4 +move 5 from 8 to 4 +move 1 from 8 to 5 +move 11 from 4 to 7 +move 8 from 9 to 7 +move 1 from 6 to 2 +move 8 from 2 to 6 +move 1 from 5 to 8 +move 4 from 1 to 5 +move 4 from 9 to 6 +move 3 from 1 to 3 +move 2 from 8 to 4 +move 1 from 7 to 6 +move 1 from 2 to 7 +move 2 from 3 to 7 +move 4 from 4 to 9 +move 11 from 6 to 9 +move 10 from 7 to 8 +move 1 from 3 to 4 +move 1 from 6 to 4 +move 4 from 5 to 7 +move 6 from 7 to 4 +move 1 from 8 to 7 +move 4 from 6 to 7 +move 12 from 4 to 8 +move 12 from 8 to 1 +move 1 from 8 to 2 +move 10 from 1 to 7 +move 2 from 4 to 1 +move 8 from 8 to 3 +move 4 from 1 to 6 +move 8 from 7 to 6 +move 2 from 6 to 5 +move 2 from 5 to 2 +move 13 from 9 to 3 +move 3 from 2 to 5 +move 8 from 3 to 4 +move 7 from 6 to 7 +move 1 from 9 to 2 +move 1 from 9 to 1 +move 2 from 6 to 4 +move 3 from 4 to 8 +move 1 from 1 to 7 +move 4 from 4 to 6 +move 3 from 8 to 7 +move 1 from 2 to 9 +move 1 from 5 to 2 +move 1 from 2 to 5 +move 2 from 4 to 5 +move 1 from 7 to 2 +move 13 from 3 to 4 +move 7 from 4 to 3 +move 4 from 5 to 9 +move 1 from 4 to 7 +move 5 from 6 to 3 +move 3 from 9 to 7 +move 10 from 7 to 8 +move 3 from 4 to 8 +move 1 from 5 to 4 +move 2 from 3 to 1 +move 3 from 7 to 4 +move 4 from 8 to 6 +move 2 from 9 to 3 +move 2 from 4 to 5 +move 4 from 4 to 3 +move 8 from 8 to 3 +move 3 from 6 to 8 +move 1 from 2 to 6 +move 5 from 7 to 9 +move 1 from 4 to 3 +move 3 from 7 to 5 +move 3 from 8 to 4 +move 7 from 7 to 5 +move 3 from 7 to 8 +move 1 from 9 to 8 +move 3 from 4 to 1 +move 1 from 5 to 8 +move 3 from 7 to 1 +move 6 from 8 to 3 +move 3 from 9 to 5 +move 2 from 6 to 5 +move 2 from 1 to 6 +move 16 from 3 to 8 +move 4 from 5 to 8 +move 4 from 3 to 8 +move 1 from 9 to 5 +move 1 from 6 to 5 +move 3 from 3 to 7 +move 6 from 1 to 6 +move 1 from 5 to 4 +move 3 from 5 to 2 +move 2 from 7 to 4 +move 1 from 2 to 8 +move 6 from 8 to 1 +move 2 from 4 to 5 +move 2 from 2 to 3 +move 7 from 8 to 7 +move 1 from 4 to 6 +move 3 from 6 to 4 +move 3 from 4 to 9 +move 3 from 6 to 3 +move 11 from 8 to 6 +move 12 from 5 to 4 +move 5 from 6 to 1 +move 9 from 3 to 2 +move 7 from 6 to 1 +move 7 from 7 to 8 +move 5 from 8 to 3 +move 2 from 3 to 6 +move 2 from 8 to 1 +move 1 from 7 to 2 +move 7 from 3 to 8 +move 1 from 9 to 1 +move 14 from 1 to 3 +move 9 from 2 to 8 +move 11 from 3 to 4 +move 22 from 4 to 1 +move 2 from 3 to 1 +move 16 from 8 to 4 +move 1 from 9 to 2 +move 3 from 6 to 9 +move 3 from 9 to 5 +move 1 from 2 to 6 +move 1 from 5 to 7 \ No newline at end of file diff --git a/advent_of_code_2022/day5/main1.cc b/advent_of_code_2022/day5/main1.cc new file mode 100644 index 0000000..74ae827 --- /dev/null +++ b/advent_of_code_2022/day5/main1.cc @@ -0,0 +1,81 @@ +#include +#include +#include + +std::vector> read_initial_setup() +{ + std::string buffer; + std::vector> stacks; + + while (true) + { + std::getline(std::cin, buffer); + if (buffer[1] == '1') + break; + + for (std::size_t idx = 0; (1 + (4 * idx)) < buffer.size(); ++idx) + { + std::size_t crate = 1 + (4 * idx); + if (buffer[crate] != ' ') + { + if (stacks.size() <= idx) + stacks.resize(idx + 1); + stacks[idx].push_back(buffer[crate]); + } + } + } + + std::getline(std::cin, buffer); // read empty line + + // flip them around, faster indexing + for (auto& stack : stacks) + stack = std::vector{stack.rbegin(), stack.rend()}; + + return stacks; +}; + +struct Instruction +{ + std::size_t move{}; + std::size_t from{}; + std::size_t to{}; +}; + +Instruction read_instruction() +{ + Instruction instruction; + std::string buffer; + std::cin >> buffer; // read 'move' + std::cin >> instruction.move; + std::cin >> buffer; // 'from' + std::cin >> instruction.from; + std::cin >> buffer; // 'to' + std::cin >> instruction.to; + instruction.from -= 1; + instruction.to -= 1; + return instruction; +} + +int main() +{ + auto stacks = read_initial_setup(); + + while (true) + { + auto instruction = read_instruction(); + + for (std::size_t idx = 0; idx < instruction.move; ++idx) + { + stacks[instruction.to].push_back(stacks[instruction.from].back()); + stacks[instruction.from].pop_back(); + } + + if (std::cin.eof()) + break; + } + + fmt::print("Result: "); + for (const auto& stack : stacks) + fmt::print("{}", stack.back()); + fmt::print("\n"); +} \ No newline at end of file diff --git a/advent_of_code_2022/day5/main2.cc b/advent_of_code_2022/day5/main2.cc new file mode 100644 index 0000000..2dc2512 --- /dev/null +++ b/advent_of_code_2022/day5/main2.cc @@ -0,0 +1,81 @@ +#include +#include +#include + +std::vector> read_initial_setup() +{ + std::string buffer; + std::vector> stacks; + + while (true) + { + std::getline(std::cin, buffer); + if (buffer[1] == '1') + break; + + for (std::size_t idx = 0; (1 + (4 * idx)) < buffer.size(); ++idx) + { + std::size_t crate = 1 + (4 * idx); + if (buffer[crate] != ' ') + { + if (stacks.size() <= idx) + stacks.resize(idx + 1); + stacks[idx].push_back(buffer[crate]); + } + } + } + + std::getline(std::cin, buffer); // read empty line + + // flip them around, faster indexing + for (auto& stack : stacks) + stack = std::vector{stack.rbegin(), stack.rend()}; + + return stacks; +}; + +struct Instruction +{ + std::size_t move{}; + std::size_t from{}; + std::size_t to{}; +}; + +Instruction read_instruction() +{ + Instruction instruction; + std::string buffer; + std::cin >> buffer; // read 'move' + std::cin >> instruction.move; + std::cin >> buffer; // 'from' + std::cin >> instruction.from; + std::cin >> buffer; // 'to' + std::cin >> instruction.to; + instruction.from -= 1; + instruction.to -= 1; + return instruction; +} + +int main() +{ + auto stacks = read_initial_setup(); + + while (true) + { + auto instruction = read_instruction(); + if (instruction.from == instruction.to) + continue; + + auto begin = stacks[instruction.from].end() - instruction.move; + stacks[instruction.to].insert(stacks[instruction.to].end(), begin, stacks[instruction.from].end()); + stacks[instruction.from].erase(begin, stacks[instruction.from].end()); + + if (std::cin.eof()) + break; + } + + fmt::print("Result: "); + for (const auto& stack : stacks) + fmt::print("{}", stack.back()); + fmt::print("\n"); +} \ No newline at end of file