open System.Collections.Generic
type CrossLetter = { Position : (int * int) option; Letter : char option; Words : Word list }
CrossLetters: CrossLetter [];
Direction : Direction option;
WordPositions : (int * int) [] }
and Direction = | Right | Down
let consecArray (arr: int []) =
let arr' = arr |> Array.sort
let s = arr |> Array.head
if elem - last = 1 then (true, elem) else (false, elem)) (true, s)
let str = Console.ReadLine()
|> Array.mapi(fun j c -> (i, j), c)
|> Array.filter(fun (_ , c) -> c = '-')
let filterWords direction grid =
|> Array.groupBy (filterGroup direction)
|> Array.filter(fun (key, grp) -> grp.Length > 1)
|> Array.filter(fun (key, grp) ->
|> Array.map (filterCoord direction)
let buildWord direction (row, grp) =
Length = grp |> Array.length;
Direction = direction |> Some;
|> Array.map (buildWord Right)
|> Array.map (buildWord Down)
let allWords grid = Array.concat [ rowsToWord grid; colsToWord grid ]
let addCrossLetters (words: Word list) (w: Word)=
[| for p in w.WordPositions do
(fun word -> word <> w && word.WordPositions |> Array.contains p)
yield { Position = Some p ; Letter = None ; Words = l}
{ w with CrossLetters = letters }
let letterDict (words:Word list) =
| Some t -> t.Contains (string char)
let strToWord (words : string list) =
let addCrossLetters (w: Word) (dict:Map<char, Word list>) =
let txt = Option.get(w.Text)
[| for c in txt.ToCharArray() do
yield { Position = None ; Letter = Some c ; Words = Option.get l }
{ w with CrossLetters = letters }
let cross (dict:IDictionary<char, string list>) (str:string) =
Words = List.filter(fun word -> word <> str) dict.[c]
{ Text = str ; Length = str.Length ; Letters = cs}
word.Letters |> Array.filter (fun le -> le.Words <> [])