Day 5, part 2.
This commit is contained in:
parent
ec2c98f960
commit
6185736ef6
27
2018/day05-2.go
Normal file
27
2018/day05-2.go
Normal 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)
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user