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) }