anchor.diff:  module gchq
   
   open System
  +
  +type group = int list
  +type groupsIntermediate = { FinishedGroups : group list; CurrentGroup : group}
  +type CellResult = Unknown | Filled | Empty
  +type AxisResult = Unknown | Pass | Fail
   
   let row i (arr: 'T[,]) = arr.[i..i, *] |> Seq.cast<'T> |> Seq.toArray
   let column i (arr: 'T[,]) = arr.[*, i..i] |> Seq.cast<'T> |> Seq.toArray
  
positive.code:     
    | _ -> Unknown
  
  let printResultGrid grid (rowTests : int list list) (columnTests : int list list) =
    let maxY = (Array2D.length1 grid) - 1
    
    let rowResults = List.map2 testAxis (rows grid) rowTests
    let columnResults = List.map2 testAxis (columns grid) columnTests
    
  
negative.code:     | Unknown -> printf "?  "
      printRow row
      printfn ""
    printfn ""
  
  let rnd = Random()
  let addRandomGuess grid =
    let x = rnd.Next(0, 25)
    let y = rnd.Next(0, 25)
    let z = if rnd.Next(0, 2) = 0 then Filled else Empty
    Array2D.mapi (fun i j v -> if i = x && j = y then z else v) grid
      
  [<EntryPoint>]
  let main argv =
    // printGrid Puzzle.initialGrid
    let start = convertPatternToResult Puzzle.initialGrid
    let guess =   
      [1..100] |> List.fold (fun acc e -> addRandomGuess acc) (convertPatternToResult Puzzle.initialGrid)
    
    printResultGrid start Puzzle.rowTests Puzzle.colTests
    
    printResultGrid guess Puzzle.rowTests Puzzle.colTests
    0 // return an integer exit code
  