Sha256: fca3093f1ecacd6d634276cc17fb89c07e8ee8bf8b8b2d83aeffad9e0c8ec0c5

Contents?: true

Size: 1.99 KB

Versions: 272

Compression:

Stored size: 1.99 KB

Contents

module OcrNumbers

let characterWidth = 3
let characterHeight = 4

let digitPatterns = 
    Map.ofList 
        [(
          [|" _ ";
            "| |";
            "|_|"; 
            "   "|],
            "0"
        );
        (
          [|"   ";
            "  |";
            "  |";
            "   "|],
            "1"
        );
        (
          [|" _ ";
            " _|";
            "|_ ";
            "   "|],
            "2"
        );
        (
          [|" _ ";
            " _|";
            " _|";
            "   "|],
            "3"
        );
        (
          [|"   ";
            "|_|";
            "  |";
            "   "|],
            "4"
        );
        (
          [|" _ ";
            "|_ ";
            " _|";
            "   "|],
            "5"
        );
        (
          [|" _ ";
            "|_ ";
            "|_|";
            "   "|],
            "6"
        );
        (
          [|" _ ";
            "  |";
            "  |";
            "   "|],
            "7"
        );
        (
          [|" _ ";
            "|_|";
            "|_|";
            "   "|],
            "8"
        );
        (
          [|" _ ";
            "|_|";
            " _|";
            "   "|],
            "9"
        )]

let matchCharacter input = 
    match Map.tryFind input digitPatterns with
    | Some x -> x
    | None -> "?"

let rows (input:string) = 
    input.Split('\n')
    |> Array.chunkBySize characterHeight

let rowToCharacters (row: string[]) = 
    let chars = (row |> Array.head |> String.length) / characterWidth |> int
    let char i (str: string) = str.Substring(i * characterWidth, characterWidth)

    Array.init chars (fun i -> Array.map (char i) row)

let characters input = input |> rows |> Array.map rowToCharacters

let rowToDigits (row: string[] []) = 
    row 
    |> Array.map matchCharacter 
    |> Array.reduce (fun x y -> x + "" + y)

let convert (input: string) =    
    input
    |> characters 
    |> Array.map rowToDigits
    |> Array.reduce (fun x y -> x + "," + y)

Version data entries

272 entries across 272 versions & 1 rubygems

Version Path
trackler-2.2.1.54 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.53 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.52 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.51 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.50 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.49 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.48 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.47 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.46 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.45 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.44 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.43 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.42 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.41 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.40 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.39 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.38 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.37 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.36 tracks/fsharp/exercises/ocr-numbers/Example.fs
trackler-2.2.1.35 tracks/fsharp/exercises/ocr-numbers/Example.fs