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