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
80 changes: 24 additions & 56 deletions exercises/practice/ocr-numbers/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -1,79 +1,47 @@
# Instructions

Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is represented, or whether it is garbled.
Optical Character Recognition or OCR is software that converts images of text into machine-readable text.
Given a grid of characters representing some digits, convert the grid to a string of digits.
If the grid has multiple rows of cells, the rows should be separated in the output with a `","`.

## Step One
- The grid is made of one of more lines of cells.
- Each line of the grid is made of one or more cells.
- Each cell is three columns wide and four rows high (3x4) and represents one digit.
- Digits are drawn using pipes (`"|"`), underscores (`"_"`), and spaces (`" "`).

To begin with, convert a simple binary font to a string containing 0 or 1.
## Edge cases

The binary font uses pipes and underscores, four rows high and three columns wide.
- If the input is not a valid size, your program should indicate there is an error.
- If the input is the correct size, but a cell is not recognizable, your program should output a `"?"` for that character.

```text
_ #
| | # zero.
|_| #
# the fourth row is always blank
```
## Examples

Is converted to "0"

```text
#
| # one.
| #
# (blank fourth row)
```

Is converted to "1"

If the input is the correct size, but not recognizable, your program should return '?'

If the input is the incorrect size, your program should return an error.

## Step Two

Update your program to recognize multi-character binary strings, replacing garbled numbers with ?

## Step Three

Update your program to recognize all numbers 0 through 9, both individually and as part of a larger string.

```text
_
_|
|_

```

Is converted to "2"
The following input (without the comments) is converted to `"1234567890"`.

```text
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # decimal numbers.
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# fourth line is always blank
# The fourth line is always blank,
```

Is converted to "1234567890"

## Step Four
The following input is converted to `"123,456,789"`.

Update your program to handle multiple numbers, one per line.
When converting several lines, join the lines with commas.
<!-- prettier-ignore-start -->

```text
_ _
_ _
| _| _|
||_ _|

_ _
|_||_ |_
Copy link
Contributor

@jiegillet jiegillet Dec 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@angelikatyborska I messed up. The CI fails because of the formatting, but somehow I didn't notice it on the PR and I merged it.
The trailing white spaces are the issue here, I suppose we could:

  • change the file themselves locally
  • change the files upstream
  • change our formatting check to ignore docs files (currently we grep for trailing whitespace on every file)
  • change my brain so it doesn't mess up again

Since the white spaces are somewhat meaningful here, and it could happen that even more meaningful trailing white spaces are in future docs (there are more coming here), I'm leaning towards upgrading our format check. WDYT? I mean the last option is tempting, but I'm not sure how to act on it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change the file themselves locally

Not great because it will show up as changed every time we pull docs via configlet.

change the files upstream

The whitespace seems intentional, and they included a prettier ignore comment. I don't think they will want to change it.

change our formatting check to ignore docs files

I guess that would mean ignoring instructions.md and introduction.md but in practice exercises only, and not instructions.append.md ? Sounds doable.

change my brain so it doesn't mess up again

I don't have that power 😞 It looks to me like you didn't wait for the CI checks to even start running, right? It's not like you ignored a failing CI check.

My preferred solution would be completely different - change our formatting checks to be exactly the same as the docs repo has. We wouldn't need to worry about this file if our formatting check also was based on prettier πŸ™‚

The javascript repo has this script: https://github.com/exercism/javascript/blob/main/bin/check-formatting.sh

_ _
|_||_ |_
| _||_|

_ _ _
_ _ _
||_||_|
||_| _|

```

Is converted to "123,456,789".
<!-- prettier-ignore-end -->
6 changes: 6 additions & 0 deletions exercises/practice/ocr-numbers/.docs/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Introduction

Your best friend Marta recently landed their dream job working with a local history museum's collections.
Knowing of your interests in programming, they confide in you about an issue at work for an upcoming exhibit on computing history.
A local university's math department had donated several boxes of historical printouts, but given the poor condition of the documents, the decision has been made to digitize the text.
However, the university's old printer had some quirks in how text was represented, and your friend could use your help to extract the data successfully.