ejercicio y números confusos

Supongo que no hace falta que os diga que el ejercicio es bueno para la salud. Todo el mundo deberia practicarlo a menudo: te hace sentir bien, te pones menos enfermo… A mi hasta me parece que piensas mejor si haces ejercicio de cuando en cuando! Y eso sin contar con que supone una muy buena “desconexion” del mundo, que ayuda a dar otro punto de vista a las cosas.

Yo suelo tener por costumbre hacer ejercicio a mediodia, antes de la hora de comer. Despues de la jornada de la mañana, una pausa para nadar te da una hora de relajacion que ademas puedes aprovechar al volver para repensar aquello en lo que estabas trabajando.. y a veces darle a las cosas un giro en el que no habias caido antes.

De hecho, este problema se me ocurrio en una de estas visitas a la piscina antes de trabajar, y tiene que ver bastante con “cambiar el punto de vista”. A ver que os parece:

En el centro al que yo voy, como en muchos otros, hay un sistema de taquillas para dejar la bolsa mientras nadas. simplemente pides una taquilla en la puerta y te dan una llavecita con un numero. Vas a la taquilla, dejas tus cosas, cierras, te vas a nadar y posiblemente cuando vuelvas aun este todo alli. El caso esta en que esa tarde a mi me dieron la llave numero 89. Yo fui tan contento a cambiarme y cuando estaba buscando… me di cuenta que solo veia 80 taquillas.

“Se me debe estar pasando algo”, me dije. Conte el numero de armarios, vi cuantas taquillas cabian… y no, no podia ser. Ademas, no hay mas sitio para armarios. “¿Sera que a lo mejor a partir de la 80 estan en el vestuario de las chicas y me han dado la llave que no es?” Estaba yo pensando en dar la vuelta e ir a preguntar a recepcion cuando me dije… “mmm… dar la vuelta… podia ser…” Y claro, es que un llavero no tiene un derecho ni un reves, y los numeros escritos a mano son dificiles de leer, asi que mi llave numero 89, dada la vuelta, bien podria ser la numero 68, ¿no? Pues efectivamente… ¡asi de simple era! Asi que abri mi taquilla, deje mis cosas y me fui a nadar

Pero claro, ya iba pensando en lo siguiente: imaginemos que hacemos un sistema de OCR limitado, que usaremos para reconocer numeros a partir de imagenes de video. Como no conocemos la orientacion de la camara, esos numeros podrian estar en un momento cualquiera tanto al derecho como al reves. Asi, esfacil leer un 6 como si fuera un 9, o viceversa. Ademas, si estos numeros estan escritos a mano y las imagenes son de baja resolucion es facil confundir algunos incluso sin tener orientacion: por ejemplo el 8 con el 0 (especialmente si escribis el cero con una barra cruzada, como yo)

Imaginemos entonces que hemos definido las siguientes posibles confusiones:

  • 0 se puede confundir con 8, tanto al derecho como al reves
  • 1 se puede confundir con 7, tanto al derecho como al reves
  • 2 se puede confundir con 7, al reves
  • 3 se puede confundir con 8, tanto al derecho como al reves
  • 4 y 5 no se confunden con nada, son asi de majos
  • 6 se puede confundir con 9, al reves
  • 7 se puede confundir con 1, tanto al derecho como al reves, y con 2, al reves
  • 8 se puede confundir con 0 y con 3, tanto al derecho como al reves
  • 9 se puede confundir con 6, al reves

¿Podrias crear una funcion que reciba un array de caracteres con lo que hemos leido del OCR y devuelva un array de enteros con todos los posibles valores que pueden representar leidos al derecho o al reves (si se puede), teniendo en cuenta que pueden ocurrir las confusiones que hemos citado antes? En el ejemplo de mi llave de la taquilla, recibiriamos el array [‘8′,’9’] y tendriamos que devolver [89, 68, 09, 60, 39, 63]

Suponemos que la entrada siempre es un array de caracteres que representa un numero entero positivo.

13 comentarios en “ejercicio y números confusos”

  1. Duda sobre el planteamiento…
    En el ejemplo…
    ¿Deberían aparecer? el 39, el 63 y el 93
    39 el 8 se confunde por el 3
    el 63, el 89 al revés confundiendo el 9 por el 6 y el 8 por el 3
    y el 93 que sería el 89 al revés confundiendo el 6 por el 9 y el 8 por el 3 ???
    cseg

  2. Hola Ricardo:

    Algo muy común en estos casos es colocar un “punto” para indicar la orientación del número. ¿No crees que eso solucionaría el problema de la orientación.

    Un saludo

  3. Duda sobre el planteamiento…
    En el ejemplo…
    ¿Deberían aparecer? el 39, el 63 y el 93
    39 el 8 se confunde por el 3
    el 63, el 89 al revés confundiendo el 9 por el 6 y el 8 por el 3
    y el 93 que sería el 89 al revés confundiendo el 6 por el 9 y el 8 por el 3 ???
    cseg

  4. hola chicos,

    Carlos: tienes toda la razon, lo corrijo ahora en el enunciado (lo probe antes de añadir todas las confusiones y luego no lo corregi!) Solo un detalle: en el caso del 93, no seria asi. Tienes que recordar que al darle la vuelta, cambias el orden de leer el numero (de izquierda a derecha) Asi que al darle la vuelta a 89 y confundir el 6 por el 9 y el 8 por el 3 te quedaria 63, no?

    gracias por el aviso!

    Recena: es cierto pero… si hubiera un punto para decirte la orientacion el problema tendria menos sustancia!  };D

  5. Una pregunta, entonces, si hay algún cuatro o cinco en el número, cómo no se puede confundir con nada, y al darle la vuelta no se transforma en nada, ¿no se toman las posibles confusiones al darle la vuelta el número.

    Un saludo.

  6. pablo: muy buenas! me alegro de que te guste! Generalmente no “damos” la solucion de por si, sino que esperamos a que entre todos lleguemos a una que funcione y añadimos los comentarios necesarios. Es mas un “proceso de discusion en equipo” que una “clase de problemas” }:)

    Tu solucion podria funcionar pero… no te parece que hay algun caso que no hace falta calcular?
    (pista: mira los comentarios anteriores!)

  7. serabe: muy bueno! efectivamente, es una solucion correcta (y ademas la primera vez que alguien envia una solucion en Ruby!) }:)

    Solo una sugerencia de diseño: yo cambiaria la definicion de reversible de tu clase String para utilizar tu diccionario de confusiones. De este modo consigues un diseño con una unica representacion de las confusiones (imagina que pasaria si decidieramos que cuatro puede confundirse con 7, por ejemplo, cuantos cambios harian falta en el programa?)

    ps: me alegro que te guste el blog! espero que te animes a seguir ayudandonos a solucionar futuros problemas! }:)

  8. serabe: muy bien, si señor! estoy dudando entre felicitarte por un trabajo bien hecho o echarme las manos a la cabeza porque te guste Dschinghis Khan };D

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *