Solver.dfs: def of minebender-game@1.0.0.0 Import: import minebender-game@1.0.0.0/solver.bend as Solver Lines 245-259 of minebender-game@1.0.0.0/solver.bend: https://jend.leeeet.dev/read.txt?path=minebender-game@1.0.0.0/solver.bend&start_line=245&end_line=259 import Base import minebender-game@1.0.0.0/types.bend as T import minebender-game@1.0.0.0/board.bend as B # A consistent layout completing the partial one, assigning the cells of # `todo` in order (cells already assigned are skipped). def dfs(todo: List<&2, Todo>, +part: T.Grid(Maybe<&2, Bool>), +ctx: Ctx) -> Maybe<&2, T.Grid(Bool)>: match todo: case Nil{}: leaf(ctx, fill(part)) case Todo{+c, +rel} <> +rest: +p0 = B.set_at(Maybe<&2, Bool>, part, c, Some{False{}}) +p1 = B.set_at(Maybe<&2, Bool>, part, c, Some{True{}}) +n = ctx_n(ctx) dfs.free(is_none(look(part, c)), u => dfs(rest, part, ctx), v => dfs.or(dfs.when(open_ok(p0, rel, n), x => dfs(rest, p0, ctx)), y => dfs.when(open_ok(p1, rel, n), z => dfs(rest, p1, ctx)))) Uses (16): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Maybe https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/board.bend&name=set_at https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=Ctx https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=Todo https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=ctx_n https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=dfs.free https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=dfs.or https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=dfs.when https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=fill https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=is_none https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=leaf https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=look https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/solver.bend&name=open_ok https://jend.leeeet.dev/definition.txt?path=minebender-game@1.0.0.0/types.bend&name=Grid