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# A consistent layout completing the partial one, assigning the cells of
246# `todo` in order (cells already assigned are skipped).
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))))

Uses (16)

Used by (10)