Sudoku: Difference between revisions

Content added Content deleted
(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


/// Distionary of all peer squares in the relevant units wrt square in question
/// 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:'''
Usage<lang fsharp>open System
<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 "Formated:\n%s"
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>