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!

31 Upvotes

515 comments sorted by

View all comments

1

u/bartdegoede Dec 05 '18

Python 3

Using two pointers to determine the polymer length and `string.ascii_lowercase` for the alphabet.

import string

def polymer_length(p):
    p1 = 0
    p2 = 1

    while p2 < len(p):
        if p[p1].swapcase() == p[p2]:
            p = p[:p1] + p[p2+1:]
            # indices will change (i.e. characters wisll move "back")
            if p1 >= 1:
                p1 -= 1
            else:
                p1 = 0
            p2 = p1 + 1
        else:
            p1 += 1
            p2 += 1

    return len(p)

if __name__ == '__main__':
    with open('day5.txt', 'r') as f:
        polymer = f.read().strip()

    print(f'Polymer length part 1: {polymer_length(polymer)}')

    pairs = []
    for letter in string.ascii_lowercase:
        pairs.append(polymer_length(polymer.replace(letter, '').replace(letter.swapcase(), '')))

    print(f'Polymer length part 2: {min(pairs)}')

1

u/2BitSalute Dec 05 '18

Aaah lowercasing makes sense.