From fb41918b20c477c1ffd2b8c1afadccbeb3916907 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 5 Dec 2022 21:56:22 +0000 Subject: [PATCH] Completed Day5 - Horrible parsing function but still works :) --- AdventOfCode2022.vcxproj | 20 -- AdventOfCode2022.vcxproj.filters | 60 ---- input/day05 | 512 +++++++++++++++++++++++++++++++ src/days/day05.cpp | 128 +++++++- src/main.cpp | 53 ++-- 5 files changed, 663 insertions(+), 110 deletions(-) diff --git a/AdventOfCode2022.vcxproj b/AdventOfCode2022.vcxproj index 3a1f741..732a954 100644 --- a/AdventOfCode2022.vcxproj +++ b/AdventOfCode2022.vcxproj @@ -132,26 +132,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/AdventOfCode2022.vcxproj.filters b/AdventOfCode2022.vcxproj.filters index 105aaed..25b90ac 100644 --- a/AdventOfCode2022.vcxproj.filters +++ b/AdventOfCode2022.vcxproj.filters @@ -33,66 +33,6 @@ Source Files - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - diff --git a/input/day05 b/input/day05 index e69de29..5261acc 100644 --- a/input/day05 +++ b/input/day05 @@ -0,0 +1,512 @@ + [Z] [W] [Z] + [D] [M] [L] [P] [G] + [S] [N] [R] [S] [F] [N] + [N] [J] [W] [J] [F] [D] [F] +[N] [H] [G] [J] [H] [Q] [H] [P] +[V] [J] [T] [F] [H] [Z] [R] [L] [M] +[C] [M] [C] [D] [F] [T] [P] [S] [S] +[S] [Z] [M] [T] [P] [C] [D] [C] [D] + 1 2 3 4 5 6 7 8 9 + +move 3 from 9 to 6 +move 7 from 6 to 2 +move 1 from 1 to 5 +move 7 from 7 to 1 +move 3 from 9 to 7 +move 1 from 9 to 1 +move 1 from 7 to 2 +move 11 from 1 to 8 +move 9 from 8 to 2 +move 1 from 6 to 7 +move 3 from 7 to 3 +move 7 from 3 to 4 +move 9 from 8 to 7 +move 3 from 3 to 1 +move 2 from 5 to 2 +move 6 from 7 to 3 +move 1 from 1 to 7 +move 1 from 9 to 2 +move 1 from 5 to 3 +move 1 from 8 to 2 +move 2 from 7 to 5 +move 1 from 1 to 4 +move 3 from 5 to 8 +move 2 from 8 to 7 +move 1 from 8 to 9 +move 7 from 3 to 1 +move 8 from 2 to 5 +move 3 from 7 to 3 +move 1 from 5 to 1 +move 1 from 9 to 6 +move 1 from 7 to 4 +move 1 from 6 to 3 +move 1 from 7 to 1 +move 9 from 4 to 5 +move 8 from 1 to 2 +move 3 from 3 to 2 +move 1 from 1 to 6 +move 7 from 5 to 6 +move 1 from 1 to 5 +move 1 from 3 to 5 +move 21 from 2 to 3 +move 8 from 6 to 3 +move 5 from 4 to 9 +move 9 from 3 to 8 +move 17 from 3 to 5 +move 6 from 2 to 1 +move 2 from 9 to 1 +move 3 from 3 to 6 +move 3 from 2 to 5 +move 7 from 8 to 2 +move 3 from 6 to 9 +move 2 from 2 to 4 +move 1 from 2 to 6 +move 2 from 2 to 6 +move 2 from 6 to 5 +move 1 from 6 to 1 +move 2 from 2 to 7 +move 1 from 8 to 2 +move 4 from 9 to 1 +move 4 from 1 to 6 +move 1 from 8 to 5 +move 3 from 6 to 9 +move 1 from 9 to 1 +move 2 from 9 to 2 +move 4 from 4 to 5 +move 1 from 7 to 8 +move 1 from 7 to 5 +move 8 from 1 to 8 +move 1 from 1 to 9 +move 1 from 6 to 8 +move 2 from 2 to 6 +move 1 from 1 to 3 +move 1 from 2 to 5 +move 1 from 3 to 4 +move 3 from 9 to 4 +move 4 from 4 to 1 +move 29 from 5 to 1 +move 2 from 6 to 3 +move 2 from 3 to 5 +move 2 from 5 to 9 +move 7 from 8 to 1 +move 3 from 8 to 6 +move 6 from 1 to 6 +move 2 from 9 to 8 +move 2 from 5 to 3 +move 3 from 5 to 6 +move 2 from 5 to 6 +move 1 from 5 to 1 +move 2 from 3 to 9 +move 1 from 8 to 6 +move 1 from 8 to 3 +move 1 from 3 to 5 +move 5 from 1 to 5 +move 5 from 6 to 2 +move 25 from 1 to 9 +move 9 from 9 to 3 +move 7 from 6 to 8 +move 9 from 5 to 9 +move 2 from 6 to 5 +move 6 from 9 to 7 +move 1 from 6 to 8 +move 3 from 2 to 1 +move 3 from 8 to 1 +move 5 from 9 to 6 +move 3 from 9 to 1 +move 4 from 6 to 9 +move 2 from 7 to 4 +move 1 from 4 to 1 +move 1 from 6 to 2 +move 7 from 1 to 6 +move 1 from 9 to 8 +move 9 from 3 to 9 +move 5 from 1 to 7 +move 1 from 5 to 7 +move 3 from 1 to 7 +move 3 from 6 to 7 +move 8 from 9 to 1 +move 3 from 7 to 3 +move 1 from 5 to 6 +move 3 from 1 to 7 +move 4 from 1 to 4 +move 2 from 8 to 5 +move 1 from 4 to 2 +move 3 from 2 to 7 +move 2 from 6 to 4 +move 1 from 1 to 2 +move 18 from 7 to 5 +move 1 from 7 to 5 +move 1 from 2 to 3 +move 4 from 5 to 9 +move 1 from 2 to 1 +move 2 from 3 to 9 +move 2 from 3 to 4 +move 2 from 6 to 5 +move 1 from 8 to 3 +move 4 from 9 to 7 +move 1 from 1 to 9 +move 3 from 5 to 2 +move 2 from 8 to 6 +move 2 from 6 to 1 +move 5 from 5 to 7 +move 7 from 9 to 7 +move 11 from 5 to 9 +move 3 from 7 to 6 +move 6 from 4 to 9 +move 5 from 7 to 3 +move 6 from 3 to 6 +move 2 from 1 to 2 +move 2 from 4 to 9 +move 6 from 9 to 2 +move 1 from 7 to 5 +move 10 from 2 to 9 +move 4 from 9 to 4 +move 1 from 4 to 3 +move 31 from 9 to 3 +move 1 from 9 to 4 +move 6 from 3 to 8 +move 1 from 5 to 8 +move 5 from 6 to 4 +move 4 from 3 to 2 +move 1 from 4 to 6 +move 22 from 3 to 7 +move 6 from 4 to 7 +move 4 from 6 to 2 +move 8 from 8 to 1 +move 3 from 2 to 8 +move 2 from 1 to 9 +move 1 from 2 to 6 +move 3 from 2 to 5 +move 2 from 5 to 4 +move 2 from 6 to 4 +move 24 from 7 to 4 +move 1 from 7 to 4 +move 2 from 1 to 5 +move 2 from 9 to 6 +move 10 from 4 to 6 +move 3 from 1 to 6 +move 6 from 7 to 1 +move 2 from 2 to 3 +move 1 from 7 to 4 +move 2 from 8 to 4 +move 1 from 8 to 5 +move 4 from 5 to 2 +move 5 from 4 to 1 +move 2 from 7 to 8 +move 2 from 8 to 4 +move 5 from 6 to 3 +move 2 from 4 to 3 +move 1 from 7 to 5 +move 2 from 3 to 6 +move 1 from 5 to 1 +move 3 from 6 to 8 +move 11 from 4 to 3 +move 7 from 6 to 1 +move 3 from 8 to 1 +move 1 from 2 to 3 +move 2 from 6 to 9 +move 2 from 2 to 3 +move 3 from 4 to 3 +move 2 from 9 to 4 +move 1 from 6 to 3 +move 5 from 1 to 2 +move 2 from 4 to 3 +move 24 from 3 to 7 +move 3 from 3 to 9 +move 1 from 2 to 6 +move 1 from 2 to 5 +move 1 from 6 to 1 +move 4 from 2 to 1 +move 2 from 9 to 2 +move 1 from 2 to 4 +move 18 from 7 to 5 +move 1 from 2 to 1 +move 1 from 9 to 1 +move 2 from 5 to 7 +move 13 from 1 to 8 +move 3 from 4 to 9 +move 7 from 1 to 7 +move 13 from 7 to 6 +move 1 from 9 to 5 +move 3 from 4 to 3 +move 1 from 9 to 8 +move 3 from 1 to 3 +move 1 from 9 to 5 +move 2 from 1 to 4 +move 2 from 7 to 3 +move 4 from 3 to 1 +move 1 from 1 to 5 +move 9 from 6 to 7 +move 5 from 7 to 1 +move 2 from 4 to 1 +move 4 from 6 to 1 +move 3 from 5 to 3 +move 3 from 3 to 5 +move 7 from 1 to 6 +move 6 from 6 to 1 +move 1 from 6 to 8 +move 2 from 7 to 9 +move 2 from 1 to 5 +move 1 from 3 to 7 +move 7 from 5 to 9 +move 10 from 1 to 5 +move 8 from 8 to 4 +move 6 from 4 to 8 +move 1 from 4 to 1 +move 2 from 9 to 8 +move 2 from 1 to 3 +move 2 from 7 to 3 +move 1 from 7 to 8 +move 4 from 3 to 8 +move 1 from 3 to 2 +move 20 from 5 to 8 +move 1 from 2 to 4 +move 4 from 9 to 4 +move 4 from 4 to 5 +move 18 from 8 to 6 +move 3 from 9 to 6 +move 1 from 3 to 9 +move 10 from 8 to 7 +move 7 from 7 to 9 +move 7 from 8 to 5 +move 3 from 7 to 8 +move 6 from 5 to 1 +move 6 from 9 to 4 +move 1 from 9 to 6 +move 1 from 3 to 6 +move 1 from 8 to 5 +move 1 from 9 to 4 +move 12 from 6 to 7 +move 5 from 7 to 1 +move 6 from 8 to 5 +move 1 from 5 to 1 +move 3 from 5 to 3 +move 8 from 4 to 9 +move 2 from 3 to 7 +move 4 from 7 to 2 +move 10 from 5 to 6 +move 11 from 1 to 6 +move 4 from 2 to 5 +move 1 from 3 to 8 +move 1 from 8 to 9 +move 1 from 4 to 7 +move 3 from 7 to 4 +move 1 from 1 to 6 +move 1 from 4 to 7 +move 1 from 7 to 1 +move 4 from 5 to 2 +move 3 from 7 to 1 +move 2 from 4 to 8 +move 20 from 6 to 8 +move 4 from 1 to 5 +move 2 from 5 to 2 +move 6 from 6 to 1 +move 5 from 1 to 8 +move 7 from 6 to 2 +move 6 from 9 to 7 +move 2 from 9 to 8 +move 2 from 7 to 4 +move 4 from 2 to 6 +move 3 from 5 to 8 +move 12 from 8 to 7 +move 1 from 4 to 3 +move 1 from 2 to 9 +move 1 from 9 to 2 +move 1 from 6 to 8 +move 1 from 3 to 1 +move 2 from 1 to 6 +move 1 from 4 to 2 +move 3 from 6 to 2 +move 2 from 5 to 7 +move 1 from 9 to 8 +move 6 from 2 to 4 +move 17 from 7 to 1 +move 10 from 1 to 7 +move 4 from 2 to 6 +move 10 from 7 to 8 +move 3 from 6 to 2 +move 4 from 4 to 1 +move 2 from 6 to 4 +move 4 from 2 to 6 +move 1 from 7 to 1 +move 2 from 4 to 3 +move 12 from 1 to 7 +move 5 from 6 to 3 +move 17 from 8 to 2 +move 4 from 3 to 8 +move 1 from 4 to 2 +move 20 from 8 to 7 +move 19 from 2 to 6 +move 7 from 6 to 3 +move 7 from 3 to 5 +move 2 from 5 to 7 +move 4 from 6 to 9 +move 1 from 4 to 2 +move 1 from 2 to 1 +move 2 from 3 to 6 +move 1 from 2 to 6 +move 1 from 3 to 1 +move 4 from 6 to 2 +move 1 from 5 to 9 +move 7 from 7 to 3 +move 7 from 3 to 8 +move 5 from 8 to 1 +move 2 from 8 to 3 +move 1 from 2 to 1 +move 3 from 5 to 6 +move 1 from 3 to 9 +move 2 from 9 to 2 +move 8 from 1 to 7 +move 3 from 7 to 6 +move 2 from 2 to 4 +move 21 from 7 to 3 +move 10 from 3 to 1 +move 2 from 9 to 2 +move 7 from 3 to 4 +move 3 from 3 to 7 +move 4 from 2 to 3 +move 3 from 7 to 8 +move 1 from 3 to 6 +move 1 from 3 to 2 +move 4 from 7 to 9 +move 10 from 1 to 6 +move 1 from 5 to 9 +move 6 from 7 to 2 +move 24 from 6 to 5 +move 2 from 8 to 4 +move 1 from 8 to 6 +move 2 from 2 to 9 +move 5 from 2 to 7 +move 1 from 2 to 9 +move 11 from 4 to 1 +move 3 from 3 to 2 +move 4 from 9 to 7 +move 1 from 1 to 5 +move 1 from 6 to 1 +move 5 from 1 to 9 +move 5 from 9 to 7 +move 5 from 7 to 5 +move 23 from 5 to 2 +move 5 from 7 to 8 +move 6 from 5 to 6 +move 1 from 3 to 7 +move 1 from 5 to 7 +move 6 from 7 to 8 +move 3 from 6 to 1 +move 2 from 8 to 7 +move 4 from 2 to 1 +move 4 from 8 to 5 +move 7 from 2 to 3 +move 1 from 7 to 4 +move 1 from 4 to 7 +move 4 from 3 to 8 +move 6 from 1 to 9 +move 4 from 8 to 6 +move 3 from 1 to 5 +move 3 from 8 to 5 +move 1 from 1 to 8 +move 3 from 9 to 1 +move 3 from 6 to 7 +move 1 from 7 to 9 +move 3 from 8 to 3 +move 8 from 5 to 7 +move 11 from 2 to 8 +move 5 from 8 to 3 +move 1 from 8 to 7 +move 10 from 3 to 4 +move 2 from 5 to 8 +move 3 from 9 to 2 +move 1 from 9 to 6 +move 7 from 2 to 7 +move 6 from 9 to 4 +move 1 from 8 to 5 +move 3 from 6 to 8 +move 1 from 5 to 3 +move 2 from 3 to 1 +move 6 from 1 to 3 +move 13 from 7 to 5 +move 16 from 4 to 3 +move 2 from 1 to 5 +move 5 from 5 to 4 +move 11 from 3 to 4 +move 2 from 7 to 1 +move 7 from 3 to 1 +move 2 from 8 to 3 +move 8 from 1 to 9 +move 12 from 4 to 8 +move 1 from 1 to 4 +move 2 from 6 to 2 +move 3 from 7 to 8 +move 2 from 4 to 6 +move 5 from 8 to 1 +move 3 from 7 to 5 +move 6 from 5 to 7 +move 2 from 2 to 5 +move 1 from 4 to 9 +move 5 from 1 to 8 +move 6 from 3 to 1 +move 7 from 5 to 7 +move 7 from 9 to 2 +move 1 from 6 to 7 +move 1 from 1 to 9 +move 2 from 5 to 3 +move 2 from 9 to 6 +move 13 from 7 to 3 +move 2 from 6 to 1 +move 1 from 9 to 2 +move 16 from 8 to 7 +move 6 from 8 to 5 +move 3 from 2 to 5 +move 4 from 2 to 1 +move 3 from 1 to 8 +move 2 from 8 to 9 +move 1 from 8 to 7 +move 1 from 2 to 1 +move 8 from 3 to 1 +move 1 from 4 to 5 +move 1 from 6 to 3 +move 2 from 9 to 7 +move 5 from 1 to 4 +move 15 from 7 to 9 +move 11 from 9 to 3 +move 7 from 1 to 3 +move 2 from 1 to 6 +move 1 from 6 to 3 +move 2 from 4 to 5 +move 2 from 4 to 9 +move 7 from 5 to 9 +move 5 from 9 to 3 +move 1 from 1 to 6 +move 5 from 5 to 9 +move 1 from 4 to 8 +move 1 from 8 to 4 +move 3 from 7 to 4 +move 8 from 9 to 5 +move 1 from 6 to 4 +move 4 from 9 to 3 +move 1 from 9 to 3 +move 23 from 3 to 1 +move 12 from 1 to 2 +move 6 from 1 to 9 +move 5 from 9 to 7 +move 3 from 3 to 7 +move 6 from 4 to 3 +move 1 from 6 to 8 +move 6 from 1 to 2 +move 3 from 7 to 3 +move 3 from 2 to 5 +move 10 from 3 to 5 +move 1 from 1 to 8 +move 12 from 2 to 5 +move 3 from 2 to 9 +move 2 from 8 to 4 +move 13 from 5 to 1 +move 2 from 9 to 2 +move 2 from 1 to 3 +move 11 from 3 to 1 +move 2 from 2 to 1 +move 2 from 1 to 9 +move 16 from 1 to 7 +move 17 from 5 to 8 +move 1 from 1 to 2 +move 3 from 9 to 6 \ No newline at end of file diff --git a/src/days/day05.cpp b/src/days/day05.cpp index de59aaf..aee182c 100644 --- a/src/days/day05.cpp +++ b/src/days/day05.cpp @@ -1,11 +1,133 @@ #include "../aoc2022.h" +enum EMoveType { + eManual, + eCrateMover9001 +}; + template struct SDay05 : public SDay { //Class constructor using SDay::SDay; + std::vector> stacks; + //Solutions to both days - Output part1() override final { return Output(); } - Output part2() override final { return Output(); } -}; + Output part1() override final { + parseStacks(); + runInstructions(eManual); + std::string ans = getTops(); + return 0; + } + Output part2() override final { + parseStacks(); + runInstructions(eCrateMover9001); + std::string ans = getTops(); + return 0; + } + + void parseStacks() { + stacks.clear(); + this->input.clear(); + this->input.seekg(0, std::ios::beg); + std::stack stackStrings; + int stackCount{ 0 }; + std::string line{ "" }; + + while (std::getline(this->input, line)) + { + if (line == "") + break; //We have finished collecting stack strings + stackStrings.push(line); + } + + //Get the number of stacks needed + line = stackStrings.top(); + stackCount = line[line.size()-2]-48; + stackStrings.pop(); + + for (int i = 0; i < stackCount; i++) + stacks.push_back(std::stack()); + + int index = 1; + while (!stackStrings.empty()) + { + line = stackStrings.top(); + int index = 1; + for (int i = 0; i < stackCount; i++) + { + if (line[index] != ' ') + stacks[i].push(line[index]); + index += 4; + } + stackStrings.pop(); + } + } + + void runInstructions(EMoveType moveType) { + std::string line{ "" }; + + while (std::getline(this->input, line)) + { + std::stringstream ss; + std::vector nums; + + /* Storing the whole string into string stream */ + ss << line; + + /* Running loop till the end of the stream */ + std::string temp; + int found; + while (!ss.eof()) { + + /* extracting word by word from stream */ + ss >> temp; + + /* Checking the given word is integer or not */ + if (std::stringstream(temp) >> found) + nums.push_back(found); + + /* To save from space at the end of string */ + temp = ""; + } + + moveCrates(moveType, nums); + } + } + + void moveCrates(EMoveType moveType, const std::vector &nums) { + //run each step + std::stack tempStack; + for (int i = 0; i < nums[0]; i++) + { + if (stacks[static_cast(nums[1]) - 1].empty()) + break; + if (moveType == eCrateMover9001) + { + tempStack.push(stacks[static_cast(nums[1]) - 1].top()); + } + else + stacks[static_cast(nums[2]) - 1].push(stacks[static_cast(nums[1]) - 1].top()); + + stacks[static_cast(nums[1]) - 1].pop(); + } + + if (moveType == eCrateMover9001) + { + while (!tempStack.empty()) + { + stacks[static_cast(nums[2]) - 1].push(tempStack.top()); + tempStack.pop(); + } + } + } + + std::string getTops() { + std::string output; + for (auto& stack : stacks) + { + output += stack.top(); + } + return output; + } +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 7833d10..a658cce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,33 +1,32 @@ #include "days/days.h" -template void runSolutions() { //Heap allocate all solutions - std::vector*> solutions = { - new SDay01("day01"), - new SDay02("day02"), - new SDay03("day03"), - new SDay04("day04"), - new SDay05("day05"), - new SDay06("day06"), - new SDay07("day07"), - new SDay08("day08"), - new SDay09("day09"), - new SDay11("day11"), - new SDay12("day12"), - new SDay13("day13"), - new SDay14("day14"), - new SDay15("day15"), - new SDay16("day16"), - new SDay17("day17"), - new SDay18("day18"), - new SDay19("day19"), - new SDay20("day20"), - new SDay21("day21"), - new SDay22("day22"), - new SDay23("day23"), - new SDay24("day24"), - new SDay25("day25") + std::vector*> solutions = { + new SDay01("day01"), + new SDay02("day02"), + new SDay03("day03"), + new SDay04("day04"), + new SDay05("day05"), + new SDay06("day06"), + new SDay07("day07"), + new SDay08("day08"), + new SDay09("day09"), + new SDay11("day11"), + new SDay12("day12"), + new SDay13("day13"), + new SDay14("day14"), + new SDay15("day15"), + new SDay16("day16"), + new SDay17("day17"), + new SDay18("day18"), + new SDay19("day19"), + new SDay20("day20"), + new SDay21("day21"), + new SDay22("day22"), + new SDay23("day23"), + new SDay24("day24"), + new SDay25("day25") }; for (auto& solution : solutions) @@ -58,5 +57,5 @@ void runSolutions() { } int main() { - runSolutions(); + runSolutions(); }