aoc-2022/day06/solution.go

40 lines
644 B
Go

package day06
import "math/bits"
type Solver struct {
inputLine []byte
}
func (s *Solver) ParseInput(input []string) {
s.inputLine = []byte(input[0])
}
func (s *Solver) solve(numNeeded int) any {
for i := numNeeded - 1; i < len(s.inputLine); i++ {
var seenMap uint32
for j := i - numNeeded + 1; j <= i; j++ {
bitValue := uint32(1 << (s.inputLine[j] - 'a'))
if seenMap&bitValue > 0 {
break
}
seenMap |= bitValue
}
if bits.OnesCount32(seenMap) == numNeeded {
return i + 1
}
}
return -1
}
func (s *Solver) SolvePart1() any {
return s.solve(4)
}
func (s *Solver) SolvePart2() any {
return s.solve(14)
}