Números OCR

Números OCR

Fácil

Introdução

A tua melhor amiga, Marta, arranjou recentemente o emprego com que sonhava, a trabalhar nas coleções de um museu de história local. Sabendo do teu interesse por programação, desabafa contigo sobre um problema no trabalho, relacionado com uma próxima exposição sobre a história da informática. O departamento de matemática de uma universidade local tinha doado várias caixas de impressos históricos, mas, dada a má condição dos documentos, decidiu-se digitalizar o texto. No entanto, a impressora antiga da universidade tinha algumas particularidades na forma como o texto era representado, e a tua amiga agradecia uma ajuda tua para extrair os dados com sucesso.

Instruções

O Reconhecimento Óptico de Carateres, ou OCR, é software que converte imagens de texto em texto legível por máquina. Dada uma grelha de carateres que representa alguns algarismos, converte a grelha numa string de algarismos. Se a grelha tiver várias linhas de células, as linhas devem ser separadas na saída por ",".

  • A grelha é composta por uma ou mais linhas de células.
  • Cada linha da grelha é composta por uma ou mais células.
  • Cada célula tem três colunas de largura e quatro linhas de altura (3x4) e representa um algarismo.
  • Os algarismos são desenhados com barras verticais ("|"), sublinhados ("_") e espaços (" ").

Casos limite

  • Se a entrada não tiver um tamanho válido, o teu programa deve indicar que há um erro.
  • Se a entrada tiver o tamanho correto, mas uma célula não for reconhecível, o teu programa deve apresentar um "?" para esse caráter.

Exemplos

A seguinte entrada (sem os comentários) é convertida em "1234567890".

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

A seguinte entrada é convertida em "123,456,789".

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

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso no debug. Nos casos em que sabes que a origem do erro vai ser de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que uses a instrução raise para «lançar» um ValueError quando a função convert() recebe uma string que não é um número OCR válido. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançares um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:

# when the rows aren't multiples of 4
raise ValueError("Number of input lines is not a multiple of four")

# when the columns aren't multiples of 3
raise ValueError("Number of input columns is not a multiple of three")
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Números OCR?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.