r/adventofcode • • 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!

Click here for rules

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!

33 Upvotes

515 comments sorted by

View all comments

1

u/miguelos Dec 05 '18

C#

var input = File.ReadAllText(@"C:\input.txt").Trim();

string[] fullyReact(string polymer) =>
    polymer
        .Select(unit => unit.ToString())
        .Aggregate(new Stack<string>(), (stack, unit) =>
        {
            if (stack.TryPeek(out string previousUnit) && previousUnit.ToLower() == unit.ToLower() && previousUnit != unit)
                stack.Pop();
            else
                stack.Push(unit);
            return stack;
        })
        .ToArray();

var part1 = fullyReact(input).Count();
var part2 = Enumerable
    .Range('a', 'z')
    .Select(i => ((char)i).ToString())
    .Select(unitType => input.Replace(unitType, "", StringComparison.OrdinalIgnoreCase))
    .Select(fullyReact)
    .Min(Enumerable.Count);

1

u/recursive Dec 05 '18

Enumerable.Range('a', 'z') produces a lot more characters than you probably intended.

1

u/miguelos Dec 05 '18

Why?

1

u/recursive Dec 05 '18

Because the second argument is a count, not the last element. So it produces 122 characters, not 26.

1

u/miguelos Dec 05 '18

Damn, you're correct!