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 (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ApplyReactions(data []byte) string {
|
func ApplyReactions(data []byte) []byte {
|
||||||
result := data
|
result := data
|
||||||
changed := true
|
changed := true
|
||||||
|
|
||||||
|
@ -13,7 +14,7 @@ func ApplyReactions(data []byte) string {
|
||||||
result, changed = React(result)
|
result, changed = React(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(result)
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// React finds substrings of the form "xX" or "Xx" and removes them, returning
|
// 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.
|
// No changes possible.
|
||||||
return result.Bytes(), changed
|
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