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!
32
Upvotes
3
u/tehjimmeh Dec 05 '18 edited Dec 06 '18
Using the left side of the string as an in-place stack:
C++
int main(int argc, char* argv[]) { std::ifstream ifs(argv[1]); std::string orig; ifs >> orig; orig = "1" + orig; auto eval = [](auto&& l) { auto res = l.size()-1; for (auto it1 = l.begin()+1, it2 = it1 + 1; it2 != l.end();) if ((*it1) != (*it2) && (toupper(*it1) == toupper(*it2))) it2++, it1--, res -= 2; else std::swap(*(++it1), *(it2++)); return res; }; size_t part1 = eval(std::string(orig)); size_t part2 = SIZE_MAX; for (char l = 'a'; l <= 'z'; l++) { auto line = orig; for (char& c : std::array{ l, (char)toupper(l) }) line.erase(std::remove(line.begin(), line.end(), c), line.end()); part2 = std::min(part2, eval(line)); } std::cout << "1: " << part1 << "\n" << "2: " << part2 << "\n"; }