Tracks
/
Go
Go
/
Ejercicios
/
Números OCR
Números OCR

Números OCR

Intermedia

Introducción

Tu mejor amiga Marta acaba de conseguir el trabajo de sus sueños trabajando con las colecciones de un museo de historia local. Como sabe que te interesa la programación, te confía un problema que tiene en el trabajo para una próxima exposición sobre la historia de la computación. El departamento de matemáticas de una universidad local había donado varias cajas de impresiones históricas, pero dado el mal estado de los documentos, se tomó la decisión de digitalizar el texto. Sin embargo, la vieja impresora de la universidad tenía algunas peculiaridades en cómo representaba el texto, y tu amiga podría usar tu ayuda para extraer los datos con éxito.

Instrucciones

El reconocimiento óptico de caracteres, u OCR, es un software que convierte imágenes de texto en texto legible por máquina. Dada una cuadrícula de caracteres que representan algunos dígitos, convierte la cuadrícula en un string de dígitos. Si la cuadrícula tiene varias filas de celdas, las filas deben separarse en la salida con una ",".

  • La cuadrícula está formada por una o más líneas de celdas.
  • Cada línea de la cuadrícula está formada por una o más celdas.
  • Cada celda mide tres columnas de ancho y cuatro filas de altura (3x4) y representa un dígito.
  • Los dígitos se dibujan con barras verticales ("|"), guiones bajos ("_") y espacios (" ").

Casos límite

  • Si la entrada no tiene un tamaño válido, tu programa debe indicar que hay un error.
  • Si la entrada tiene el tamaño correcto, pero una celda no es reconocible, tu programa debe mostrar un "?" para ese carácter.

Ejemplos

La siguiente entrada (sin los comentarios) se convierte en "1234567890".

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

La siguiente entrada se convierte en "123,456,789".

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

Notas de implementación

Define una función recognizeDigit como se describe en el Paso 1 de las instrucciones, pero haz que reconozca los diez dígitos, del 0 al 9. Elige a tu gusto los parámetros y los valores que devuelve, pero haz que sea útil como subrutina para el paso 2.

Para el Paso 2 define,

func Recognize(string) []string

e impleméntala usando recognizeDigit.

Los strings de entrada que se prueban aquí tienen un \n al principio de cada línea y ningún \n al final de la última línea. (Esto hace que los literales de string sin procesar sean más legibles.)

Como puntos extra, maneja con elegancia los datos mal formateados. ¿Qué deberías hacer con una celda parcial? ¿Descartarla? ¿Rellenarla con espacios? ¿Reportarla con el carácter "?"? ¿Qué deberías hacer si el primer carácter no es \n?

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Go Exercism

¿Todo listo para empezar Números OCR?

Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.