Advent-of-Code/year25/day7_pg/stack.go
2025-12-08 05:16:46 +02:00

49 lines
1.0 KiB
Go

package day7_pg
import (
"iter"
"git.bizdoc.ro/private/devkit.git/collections/dsa"
"git.bizdoc.ro/private/devkit.git/collections/geometry/v2"
)
type Day7Part1RenderEvent struct {
Point geometry.Point
Grid geometry.Grid[byte]
TotalProcessed int64
Step int
}
func Day7ProgressFillPart1(g geometry.Grid[byte], start geometry.Point) iter.Seq[Day7Part1RenderEvent] {
return func(yield func(Day7Part1RenderEvent) bool) {
stack := dsa.NewStack[geometry.Point]()
stack.Push(start)
ev := Day7Part1RenderEvent{
Point: start,
Grid: g,
TotalProcessed: 0,
}
for !stack.IsEmpty() {
start := stack.Pop()
if g.ContainsPoint(start) {
switch g.At(start) {
case 'S':
stack.Push(start.MoveDown())
case '.':
g.Set(start, '|')
stack.Push(start.MoveDown())
case '^':
stack.Push(start.MoveRight())
stack.Push(start.MoveLeft())
ev.TotalProcessed += 1
}
}
ev.Step += 1
if !yield(ev) {
return
}
}
}
}