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

Números OCR

Médio

Introdução

Sua melhor amiga Marta conseguiu recentemente o emprego dos sonhos trabalhando com as coleções de um museu de história local. Sabendo do seu interesse por programação, ela te confidencia um problema no trabalho por causa de uma exposição futura sobre a história da computação. O departamento de matemática de uma universidade local havia doado várias caixas de impressos históricos, mas, diante do estado precário dos documentos, decidiram digitalizar o texto. No entanto, a impressora antiga da universidade tinha algumas peculiaridades na forma como representava o texto, e sua amiga bem que poderia contar com sua ajuda para extrair os dados com sucesso.

Instruções

Reconhecimento Ótico de Caracteres, ou OCR, é um software que converte imagens de texto em texto legível por máquina. Dada uma grade de caracteres que representa alguns dígitos, converta a grade em uma string de dígitos. Se a grade tiver várias linhas de casas, as linhas devem ser separadas na saída com uma ",".

  • A grade é formada por uma ou mais linhas de casas.
  • Cada linha da grade é formada por uma ou mais casas.
  • Cada casa tem três colunas de largura e quatro linhas de altura (3x4) e representa um dígito.
  • Os dígitos são desenhados com barras verticais ("|"), sublinhados ("_") e espaços (" ").

Casos extremos

  • Se a entrada não tiver um tamanho válido, seu programa deve indicar que há um erro.
  • Se a entrada tiver o tamanho correto, mas uma casa não for reconhecível, seu programa deve gerar um "?" para esse caractere.

Exemplos

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

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

A entrada a seguir é convertida em "123,456,789".

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

Notas de implementação

Defina uma função recognizeDigit como descrito no Passo 1 das instruções, mas faça com que ela reconheça todos os dez dígitos, de 0 a 9. Escolha o que você quiser para os parâmetros e os valores de retorno, mas faça com que ela seja útil como sub-rotina para o passo 2.

Para o Passo 2, defina

func Recognize(string) []string

e implemente-a usando recognizeDigit.

As strings de entrada testadas aqui têm um \n no início de cada linha e nenhum \n no final da última linha. (Isso deixa os literais de string brutos mais legíveis.)

Para ganhar pontos extras, trate os dados mal formatados com elegância. O que você deve fazer com uma casa incompleta? Descartar? Preencher com espaços? Sinalizar com o caractere "?"? O que você deve fazer se o primeiro caractere não for \n?

Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

Tudo pronto para começar Números OCR?

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.