Sudoku: Difference between revisions
Content deleted Content added
Added backtrack F# solution |
m →{{header|F_Sharp|F#}}: Tidied up indexing indentation |
||
Line 4,012: | Line 4,012: | ||
[for s in squares do s, [| for u in unitList do if u |> Array.contains s then u |] ] |> Map.ofSeq |
[for s in squares do s, [| for u in unitList do if u |> Array.contains s then u |] ] |> Map.ofSeq |
||
/// |
/// Dictionary of all peer squares in the relevant units wrt square in question |
||
let peers = |
let peers = |
||
[for s in squares do units[s] |> Array.concat |> Array.distinct |> Array.except [s] |> tuple2 s] |> Map.ofSeq |
[for s in squares do units[s] |> Array.concat |> Array.distinct |> Array.except [s] |> tuple2 s] |> Map.ofSeq |
||
Line 4,059: | Line 4,059: | ||
let solve grid = grid |> parseGrid >>= backtrack (Some "A1") |
let solve grid = grid |> parseGrid >>= backtrack (Some "A1") |
||
</lang> |
</lang> |
||
'''Usage:''' |
|||
<lang fsharp>open System |
|||
open SudokuBacktrack |
open SudokuBacktrack |
||
Line 4,066: | Line 4,067: | ||
let puzzle = "000028000800010000000000700000600403200004000100700000030400500000000010060000000" |
let puzzle = "000028000800010000000000700000600403200004000100700000030400500000000010060000000" |
||
puzzle |> printfn "Puzzle:\n%s" |
puzzle |> printfn "Puzzle:\n%s" |
||
puzzle |> parseGrid |> prettyPrint |> printfn " |
puzzle |> parseGrid |> prettyPrint |> printfn "Formatted:\n%s" |
||
puzzle |> solve |> prettyPrint |> printfn "Solution:\n%s" |
puzzle |> solve |> prettyPrint |> printfn "Solution:\n%s" |
||
Line 4,072: | Line 4,073: | ||
Console.ReadKey() |> ignore |
Console.ReadKey() |> ignore |
||
0</lang> |
0</lang> |
||
Output<pre> |
{{Output}}<pre> |
||
Puzzle: |
Puzzle: |
||
000028000800010000000000700000600403200004000100700000030400500000000010060000000 |
000028000800010000000000700000600403200004000100700000030400500000000010060000000 |
||
Line 4,129: | Line 4,130: | ||
|>List.iter(fun (_,n)->n|>Seq.fold(fun z ((_,g),v)->[z..g-1]|>Seq.iter(fun _->printf " |");printf "%s|" v; g+1 ) 0 |>ignore;printfn "") |
|>List.iter(fun (_,n)->n|>Seq.fold(fun z ((_,g),v)->[z..g-1]|>Seq.iter(fun _->printf " |");printf "%s|" v; g+1 ) 0 |>ignore;printfn "") |
||
</lang> |
</lang> |
||
'''Usage:''' |
|||
===Demonstration=== |
|||
Given sud1.csv: |
Given sud1.csv: |
||
<pre> |
<pre> |