Anonymous user
Sudoku: Difference between revisions
m
→Immutable Backtracker
m (→Immutable Backtracker: Fixing syntax highlighting) |
|||
Line 3,988:
//Helpers
let tuple2 a b = a,b
let flip f a b = f b a
let (>>=) f g = Option.bind g f
Line 4,012 ⟶ 4,013:
[for s in squares do s, [| for u in unitList do if u |> Array.contains s then u |] ] |> Map.ofSeq
///
let peers =
[for s in squares do units[s] |> Array.concat |> Array.distinct |> Array.except [s] |> tuple2 s] |> Map.ofSeq
Line 4,039 ⟶ 4,040:
let next s = squares |> Array.tryFindIndex ((=)s) |> function Some i when i + 1 < 81 -> Some squares[i + 1] | _ -> None
/// Backtrack
let rec
| None -> Some values // solved!
| Some
| Some
let rec tracker
match dx with▼
| [] -> None
| d::
|
| success -> success
▲ |> List.filter (constraints values s2)
▲ |> tracker values
/// solve sudoku using simple backtracking
let solve grid = grid |> parseGrid >>=
'''Usage:'''
<lang fsharp>open System
|