49 lines
1.0 KiB
Go
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
|
|
}
|
|
}
|
|
}
|
|
}
|