Está en la página 1de 6

Fundación Jala

Kata Bank OCR

Trabajas en un banco que ha comprado una máquina obsoleta. Esta máquina obsoleta ayuda a leer cartas y faxes
enviados por otras sucursales del banco.

Esta máquina produce un archivo con entradas parecidas a la siguiente:

Cada entrada tiene cuatro líneas y cada línea tiene 27 caracteres.

Las primeras tres líneas de cada entrada contienen un número de cuenta escrito con barras horizontales (|) y caracteres
de subrayado (_). La cuarta línea esta en blanco.

Cada número de cuenta debe tener 9 dígitos, todos ellos en el rango del 0 al 9.

Un archivo normal contiene alrededor de 500 entradas.

Fase 1:
La primera tarea es escribir un programa que lea este archivo y lo traduzca en números de cuenta.

Casos de prueba:
Fase 2:
Una vez que la anterior historia está terminada, nos damos rápidamente cuenta de que la maquina en realidad no es
infalible. A veces el reconocimiento falla. El próximo paso es validar que los números leídos son válidos y representan
números de cuenta. Un número de cuenta valido tiene un checksum valido. Este se puede calcular como sigue:

número de cuenta: 3 4 5 8 8 2 8 6 5

posiciones: d9 d8 d7 d6 d5 d4 d3 d2 d1

El checksum se calcula con la fórmula:

(d1+2*d2+3*d3 +...+9*d9) mod 11 = 0

Ahora se puede escribir código para calcular el checksum de un número dado y se indique si es un número de cuenta
valido.
Fase 3:
Se nos pide volcar los resultados en un archivo, uno para cada archivo de entrada, en el siguiente formato:

457508000

664371495 ERR

86110??36 ILL

Es decir, el archivo tiene un número de cuenta por fila. Si algunos caracteres son ilegibles se reemplazan por el símbolo
(?). En caso de que el número tenga un checksum invalido o sea un numero ilegible se anota en una segunda columna
que indique dicho estado. [ERR] / [ILL]

Casos de prueba:

Fase 4:
Resulta que a menudo, cuando el número aparece como ERR o ILL es porque la maquina ha tenido problemas en el
manejo de caracteres (barra vertical o un carácter de subrayado) para algún digito. Por ejemplo, en:

El 9 podría haber sido un 8 si la maquina se saltó una |.

Otra opción es que talvez el 0 podría haber sido un 8 o el 1 haber sido un 7. El 5 podría haber sido un 9 o un 6.

La próxima tarea es entonces buscar los números que tengan ERR o ILL e intentar deducir el número que podrían ser
añadiendo o eliminando solamente un carácter (una barra vertical o una barra de subrayado).
Si solamente hay un único número posible con checksum valido, usar ese en el resultado final. Si hay varias opciones, el
estado debe ser AMB. Si todavía no se puede saber cuál el resultado el estado deber ser ILL.

Casos de prueba:

También podría gustarte