Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 33 additions & 39 deletions exercises/ocr-numbers/example.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,50 +40,44 @@ const PATTERNS = {
' _|',
' '],
};
export default class Parser {
// eslint-disable-next-line class-methods-use-this
convert(text) {
return Parser.splitIntoRows(text).map(Parser.valuesInRow).join(',');
}

static valuesInRow(row) {
return Parser.splitIntoDigits(row).map(Parser.getDigit).join('');
}

static splitIntoRows(text) {
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 += 1) {
row += `${lines[rowNumber + rowLine]}\n`;
}
rows.push(row.slice(0, -1));
const splitIntoRows = (text) => {
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 += 1) {
row += `${lines[rowNumber + rowLine]}\n`;
}
return rows;
rows.push(row.slice(0, -1));
}
return rows;
};

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

static getDigit(text) {
const digit = Object
.values(PATTERNS)
.map(x => x.join(''))
.indexOf(text);
if (digit === -1) {
return '?';
}
return digit;
const getDigit = (text) => {
const digit = Object
.values(PATTERNS)
.map(x => x.join(''))
.indexOf(text);
if (digit === -1) {
return '?';
}
}
return digit;
};

const valuesInRow = row => splitIntoDigits(row).map(getDigit).join('');

export const convert = text => splitIntoRows(text).map(valuesInRow).join(',');
36 changes: 17 additions & 19 deletions exercises/ocr-numbers/ocr-numbers.spec.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import Ocr from './ocr-numbers';

const ocr = new Ocr();
import { convert } from './ocr-numbers';

describe('ocr', () => {
test('recognizes zero', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ '| |\n'
+ '|_|\n'
Expand All @@ -13,7 +11,7 @@ describe('ocr', () => {
});

xtest('recognizes one', () => {
expect(ocr.convert(
expect(convert(
' \n'
+ ' |\n'
+ ' |\n'
Expand All @@ -22,7 +20,7 @@ describe('ocr', () => {
});

xtest('recognizes two', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ ' _|\n'
+ '|_ \n'
Expand All @@ -31,7 +29,7 @@ describe('ocr', () => {
});

xtest('recognizes three', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ ' _|\n'
+ ' _|\n'
Expand All @@ -40,7 +38,7 @@ describe('ocr', () => {
});

xtest('recognizes four', () => {
expect(ocr.convert(
expect(convert(
' \n'
+ '|_|\n'
+ ' |\n'
Expand All @@ -49,7 +47,7 @@ describe('ocr', () => {
});

xtest('recognizes five', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ '|_ \n'
+ ' _|\n'
Expand All @@ -58,7 +56,7 @@ describe('ocr', () => {
});

xtest('recognizes six', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ '|_ \n'
+ '|_|\n'
Expand All @@ -67,7 +65,7 @@ describe('ocr', () => {
});

xtest('recognizes seven', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ ' |\n'
+ ' |\n'
Expand All @@ -76,7 +74,7 @@ describe('ocr', () => {
});

xtest('recognizes eight', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ '|_|\n'
+ '|_|\n'
Expand All @@ -85,7 +83,7 @@ describe('ocr', () => {
});

xtest('recognizes nine', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ '|_|\n'
+ ' _|\n'
Expand All @@ -94,7 +92,7 @@ describe('ocr', () => {
});

xtest('recognizes ten', () => {
expect(ocr.convert(
expect(convert(
' _ \n'
+ ' || |\n'
+ ' ||_|\n'
Expand All @@ -103,7 +101,7 @@ describe('ocr', () => {
});

xtest('identifies garble', () => {
expect(ocr.convert(
expect(convert(
' \n'
+ '| |\n'
+ '| |\n'
Expand All @@ -112,7 +110,7 @@ describe('ocr', () => {
});

xtest('converts 110101100', () => {
expect(ocr.convert(
expect(convert(
' _ _ _ _ \n'
+ ' | || | || | | || || |\n'
+ ' | ||_| ||_| | ||_||_|\n'
Expand All @@ -121,7 +119,7 @@ describe('ocr', () => {
});

xtest('identifies garble mixed in', () => {
expect(ocr.convert(
expect(convert(
' _ _ _ \n'
+ ' | || | || | || || |\n'
+ ' | | _| ||_| | ||_||_|\n'
Expand All @@ -130,7 +128,7 @@ describe('ocr', () => {
});

xtest('converts 1234567890', () => {
expect(ocr.convert(
expect(convert(
' _ _ _ _ _ _ _ _ \n'
+ ' | _| _||_||_ |_ ||_||_|| |\n'
+ ' ||_ _| | _||_| ||_| _||_|\n'
Expand All @@ -139,7 +137,7 @@ describe('ocr', () => {
});

xtest('converts 123 456 789', () => {
expect(ocr.convert(
expect(convert(
' _ _ \n'
+ ' | _| _|\n'
+ ' ||_ _|\n'
Expand Down