def dfs
minebender-game@1.0.0.0 · solver.bend:245
import minebender-game@1.0.0.0/solver.bend as Solver
import Base
import minebender-game@1.0.0.0/types.bend as T
import minebender-game@1.0.0.0/board.bend as B
245
246
247def dfs(todo: List<&2, Todo>, +part: T.Grid(Maybe<&2, Bool>), +ctx: Ctx) ->
248 Maybe<&2, T.Grid(Bool)>:
249 match todo:
250 case Nil{}:
251 leaf(ctx, fill(part))
252 case Todo{+c, +rel} <> +rest:
253 +p0 = B.set_at(Maybe<&2, Bool>, part, c, Some{False{}})
254 +p1 = B.set_at(Maybe<&2, Bool>, part, c, Some{True{}})
255 +n = ctx_n(ctx)
256 dfs.free(is_none(look(part, c)),
257 u => dfs(rest, part, ctx),
258 v => dfs.or(dfs.when(open_ok(p0, rel, n), x => dfs(rest, p0, ctx)),
259 y => dfs.when(open_ok(p1, rel, n), z => dfs(rest, p1, ctx))))