Day 5, part 2.

This commit is contained in:
Anna Rose 2018-12-05 04:04:53 -05:00
parent ec2c98f960
commit 6185736ef6
No known key found for this signature in database
GPG Key ID: 8D9ACA841015C59A
2 changed files with 41 additions and 2 deletions

27
2018/day05-2.go Normal file
View File

@ -0,0 +1,27 @@
package main
import (
"fmt"
"internal/polymer"
"internal/util"
)
func main() {
data := util.ReadInputBytes()
result := [26][]byte{}
for i := 0; i < 26; i++ {
result[i] = polymer.StripElement(data, rune('a'+i))
result[i] = polymer.ApplyReactions(result[i])
}
shortest := len(result[0])
for i := 1; i < 26; i++ {
if len(result[i]) < shortest {
shortest = len(result[i])
}
}
fmt.Println(shortest)
}

View File

@ -3,9 +3,10 @@ package polymer
import (
"bytes"
"unicode"
)
func ApplyReactions(data []byte) string {
func ApplyReactions(data []byte) []byte {
result := data
changed := true
@ -13,7 +14,7 @@ func ApplyReactions(data []byte) string {
result, changed = React(result)
}
return string(result)
return result
}
// React finds substrings of the form "xX" or "Xx" and removes them, returning
@ -40,3 +41,14 @@ func React(data []byte) ([]byte, bool) {
// No changes possible.
return result.Bytes(), changed
}
// StripElement removes all instances of letter or its upper-case counterpart
// from the input.
func StripElement(data []byte, strip rune) []byte {
return bytes.Map(func(r rune) rune {
if r == strip || r == unicode.ToUpper(strip) {
return -1
}
return r
}, data)
}