Sha256: 826748d12d3013e81efc44327d8ba15dd806c815304283708029a4a5dddb4e45

Contents?: true

Size: 1.94 KB

Versions: 121

Compression:

Stored size: 1.94 KB

Contents

interface Patterns {
    [key: number]: string[]
}

const PATTERNS: Patterns = {
    0: [' _ ',
        '| |',
        '|_|',
        '   '],
    1: ['   ',
        '  |',
        '  |',
        '   '],
    2: [' _ ',
        ' _|',
        '|_ ',
        '   '],
    3: [' _ ',
        ' _|',
        ' _|',
        '   '],
    4: ['   ',
        '|_|',
        '  |',
        '   '],
    5: [' _ ',
        '|_ ',
        ' _|',
        '   '],
    6: [' _ ',
        '|_ ',
        '|_|',
        '   '],
    7: [' _ ',
        '  |',
        '  |',
        '   '],
    8: [' _ ',
        '|_|',
        '|_|',
        '   '],
    9: [' _ ',
        '|_|',
        ' _|',
        '   '],
}

export default class OcrParser {
    static convert(text: string) {
        return OcrParser.splitIntoRows(text).map(OcrParser.valuesInRow).join(',')
    }

    static valuesInRow(row: string) {
        return OcrParser.splitIntoDigits(row).map(OcrParser.getDigit).join('')
    }

    static splitIntoRows(text: string) {
        const rows = []
        const lines = text.split('\n')
        for (let rowNumber = 0; rowNumber < lines.length; rowNumber += 4) {
            let row = ''
            for (let rowLine = 0; rowLine < 4; rowLine++) {
                row += `${lines[rowNumber + rowLine]}\n`
            }
            rows.push(row.slice(0, -1))
        }
        return rows
    }

    static splitIntoDigits(row: string) {
        const digits = [],
            rows = row.split('\n')
        for (let digitNumber = 0; digitNumber < rows[0].length; digitNumber += 3) {
            let digit = ''
            for (const row of rows) {
                digit += row.substr(digitNumber, 3)
            }
            digits.push(digit)
        }
        return digits
    }

    static getDigit(text: string) {
        for (const digit in PATTERNS) {
            if (PATTERNS[digit].join('') === text) {
                return digit
            }
        }
        return '?'
    }

}

Version data entries

121 entries across 121 versions & 1 rubygems

Version Path
trackler-2.2.1.78 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.77 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.76 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.75 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.74 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.73 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.72 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.71 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.70 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.69 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.68 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.67 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.66 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.65 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.64 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.63 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.62 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.61 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.60 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts
trackler-2.2.1.59 tracks/typescript/exercises/ocr-numbers/ocr-numbers.example.ts