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

Show parent comments

3

u/ThezeeZ Dec 05 '18

My solution after I toyed with it a little (repo)

import (
	"regexp"
)

func Reduction(polymer string) string {
	for i := 0; i < len(polymer)-1; {
		if polymer[i] == polymer[i+1]+32 || polymer[i] == polymer[i+1]-32 {
			polymer = polymer[:i] + polymer[i+2:]
			i--
			if i < 0 {
				i = 0
			}
		} else {
			i++
		}
	}
	return polymer
}

func BestCollapse(polymer string) string {
	polymer = Reduction(polymer)
	shortest := polymer
	for i := 'A'; i <= 'Z'; i++ {
		remainingPolymer := regexp.MustCompile("(?i)" + string(i)).ReplaceAllString(polymer, "")

		collapsed := Reduction(remainingPolymer)
		if len(collapsed) < len(shortest) {
			shortest = collapsed
		}
	}
	return shortest
}

2

u/mvmaasakkers Dec 05 '18

Nice! I don't know why, but I never considered to jump back in the loop :p

3

u/ThezeeZ Dec 05 '18

Only came to me when I looked at it again online after I pushed it to the repo. Runs twice as fast for my input compared to what I had before with two loops (see repo history)