40 lines
643 B
Go
40 lines
643 B
Go
package day6
|
|
|
|
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)
|
|
}
|