Percursos
/
Go
Go
/
Exercícios
/
Números OCR
Números OCR

Números OCR

Médio

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".

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

Notas de implementação

Define uma função recognizeDigit como descrito no Passo 1 das instruções, mas faz com que reconheça todos os dez algarismos, de 0 a 9. Escolhe os parâmetros e os valores devolvidos que quiseres, mas torna-a útil como sub-rotina para o passo 2.

Para o passo 2, define

func Recognize(string) []string

e implementa-a usando recognizeDigit.

As strings de entrada testadas aqui têm um \n no início de cada linha e não têm \n no fim da última linha. (Isto torna os literais de string brutos mais legíveis.)

Para pontos extra, lida com dados mal formatados de forma elegante. O que deves fazer com uma célula parcial? Descartá-la? Preenchê-la com espaços? Assinalá-la com o caráter "?"? O que deves fazer se o primeiro caráter não for \n?

Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

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

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.