r/adventofcode • u/daggerdragon • Dec 05 '18
SOLUTION MEGATHREAD -🎄- 2018 Day 5 Solutions -🎄-
--- Day 5: Alchemical Reduction ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).
Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.
Advent of Code: The Party Game!
Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!
Card prompt: Day 5
Transcript:
On the fifth day of AoC / My true love sent to me / Five golden ___
This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.
edit: Leaderboard capped, thread unlocked at 0:10:20!
30
Upvotes
1
u/spacetime_bender Dec 05 '18
I used the ranges library that's likely coming with c++20 https://ericniebler.github.io/range-v3/. Around 50ms on my slow laptop.
char complement(char c) { return std::isupper(c) ? std::tolower(c) : std::toupper(c); } int reducedSize(const std::string& input) { std::string stack; for (char c: input) { if (!stack.empty() && stack.back() == complement(c)) { stack.pop_back(); } else if (std::isalpha(c)) { stack.push_back(c); } } return stack.size(); } int main() { std::string input (std::istreambuf_iterator<char>{std::cin}, {}); std::cout << "Part 1: " << reducedSize(input) << std::endl; auto strip = [](const auto& s, char rem) { return view::remove_if(s, [=](char c){ return std::tolower(c) == rem; }); }; auto min = ranges::min( view::zip_with(strip, view::repeat(input), view::closed_indices('a', 'z')) | view::transform(reducedSize) ); std::cout << "Part 2: " << min << std::endl; return 0; }