open System open System.IO type Digit = { Number:int; Pixels:int[] } let toDigits path = let lines = File.ReadAllLines(path) let strings = lines |> Array.map (fun s -> s.Split(',')) let data = strings.[1..] let values = data |> Array.map (Array.map int) values |> Array.map (fun xs -> { Number = xs.[0]; Pixels = xs.[1..] }) let samples = let path = @"c:\digits\digitssample.csv" in toDigits path let distance xs ys = Array.map2 (fun x y -> (x - y) * (x - y)) xs ys |> Array.sum let classify (unknown:int[]) = samples |> Array.minBy (fun sample -> distance unknown sample.Pixels) |> fun digit -> digit.Number let checks = let path = @"c:\digits\digitscheck.csv" in toDigits path let matches = checks |> Array.filter (fun check -> let x = classify check.Pixels printfn "%d %d" x check.Number x = check.Number ) let result = float matches.Length / float checks.Length