2022 Day 6 Complete!
This commit is contained in:
51
2022/day06/main.go
Normal file
51
2022/day06/main.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToString()
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Printf("First Start of Packet @ %d\n", findFirstStartOfPacket(inp))
|
||||
fmt.Println("")
|
||||
fmt.Println("# Part 2")
|
||||
fmt.Printf("First Start of Message @ %d\n", findFirstStartOfMessage(inp))
|
||||
}
|
||||
|
||||
func findFirstStartOfPacket(inp string) int {
|
||||
return findFirstWithXUnique(inp, 4)
|
||||
}
|
||||
|
||||
func findFirstStartOfMessage(inp string) int {
|
||||
return findFirstWithXUnique(inp, 14)
|
||||
}
|
||||
|
||||
func findFirstWithXUnique(inp string, x int) int {
|
||||
for i := range inp {
|
||||
if i < x {
|
||||
continue
|
||||
}
|
||||
if findUniqueCountBefore(inp, i) >= x {
|
||||
return i + 1
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func findUniqueCountBefore(inp string, pos int) int {
|
||||
if len(inp) < pos {
|
||||
return -1
|
||||
}
|
||||
counts := make(map[byte]int)
|
||||
for i := pos; i >= 0; i-- {
|
||||
if _, ok := counts[inp[i]]; !ok {
|
||||
counts[inp[i]]++
|
||||
} else {
|
||||
return len(counts)
|
||||
}
|
||||
}
|
||||
return pos
|
||||
}
|
||||
Reference in New Issue
Block a user