Está en la página 1de 4

Reflejo del Reloj

Adrián no tiene un reloj en su habitación, por lo que cuando necesita ver la hora sin tener que
desplazarse lo hace mirando el que está en la sala, pero por medio de un espejo que está en el
corredor. El problema es que a veces se le olvida que lo que está viendo es un reflejo y que tiene
que hacer la “conversión” correspondiente. Así, por ejemplo, si en el espejo ve las 2:48, es porque
en realidad son las 9:12.

Ayúdale a Adrián haciendo un programa para convertir la hora reflejada en la hora real.

Entrada: La entrada contiene dos líneas, la primera con un valor entero entre 1 y 12 para las
horas que se ven en el espejo y la segunda con un valor entero entre 0 y 59 para los minutos.

Salida: La hora correcta correspondiente en formato horas:minutos. Ten en cuenta que no es


necesario anteceder 0 cuando alguno de los dos elementos es menor que 10, es decir, una salida
como 3:7 es correcta y no se debe convertir a 3:07.

Solución:

Para empezar, uno visualiza la situación ‘volteando’ el reloj con la mente; esto es la manera más
intuitiva de comenzar con el problema.

Naturalmente, uno observa que si, por ejemplo, la manecilla del horario está en el 2, su reflejó
estará en el 10; o que, si está en el 7, su reflejo estará en el 5:

No obstante, la vida, la universidad, el amor y la programación no son tan sencillos.


Para poder modelar una función que con base en la entrada nos dé lo que queremos necesitamos
particionar el reloj tanto en minutos como en horas:

Ahora bien, para no sufrir una embolia por tanto estrés, sueño, y cafeína de mala calidad es mejor
observar la situación con dibujitos y colorcitos:

El caso más sencillo e ideal es cuando el minutero está en el 12; con eso, el ejercicio es solo hallar
la diferencia entre 12 (que es el valor máximo para las horas) y la cantidad de horas de la entrada.
El proceso es similar para los minutos cuando min≠0, solamente que se halla la diferencia
entre 60 (el valor máximo para los minutos) y la cantidad de minutos de entrada. Pero eso lo
veremos en un momento.

Ahora bien, las cosas se ponen mas duras y apretaditas cuando los minutos no son 0.

Primero veamos que, para saber los minutos reflejados es igual que en el dibujito anterior. Todo
muy lindo:

Pero si usted es observador o ya lleva 15 horas tratando de resolver esta vaina, se habrá dado
cuenta de que, lo que usted visualiza cuando le da la vuelta al reloj en su mente y calcula a ojo es
que, si el avance de la entrada es 1, el avance reflejado seria 11. Pero la tiesa realidad es que el
resultado es 10.

La razón para esto es que, si usted piensa en las horas como ‘enteros’, los casos en que los min=0
usted está trabajando con horas ‘completas’, pero cuando min≠0 está usando horas ‘fraccionadas’.

Para que me entienda (y si ya entendió me disculpa la carreta), la 1:12 es los mismo que decir:
12
1 + 60 de hora. O sea, una hora completa y un poquito.

Entonces, no se puede decir que le falta 11 para llegar a ser 12, sino que le faltan 10 con 48
minutos.

Bueno, y ahora que entendemos cuál es el problema, de seguro quiere la solución. Yo con todo
gusto se la daría si no se volviera un problema de copyright. Pero para que no digan que el título
era bait, les voy a dar spoilers.
Lo primero que tiene que hacer es modelar la función cuando min=0. Hace la diferencia entre el
máximo posible de horas (o sea 12) y la entrada, y en los minutos siempre es 0. Lo más fácil y
bonito.

Luego, cuando m≠0; en este caso la diferencia de los minutos es con el máximo (o sea 60), lo
normal. Pero con las horas no puede usar 12 (si no entiende por qué es porque le faltó leer bien lo
que le explique, no me cuestione), el caso es que, como las horas no son ‘completas’ usted hace la
resta con el {número máximo de horas – 1}1.

También hay que especificarle a Python que cuando las horas dan 0, eso equivale a 12 y que
cuando los minutos dan 60, equivalen a 0.

Llegados a este punto, la bendita plataforma no le recibe el ejercicio y uno no sabe por qué.
Después de sufrir mucho y expandir mi vocabulario de vulgaridades que se le pueden decir a un
computador, descubrí que hay casos en que la salida le da números negativos, por ejemplo,
cuando la entrada es 12:13 o cualquier otro donde el horario esté en 12 y min≠0.

Para arreglar esto, hay que entender que para este ejercicio solo existen valores entre 0 y 12,
cualquier valor en la dirección contraria es la misma vaina pero al revés. Python lo entiende como
si fueran reales normales.

El hecho es que toca explicarle que, para nosotros, el valor a la izquierda del 0 no es -1 sino 11, el
siguiente no es -2 sino 10, etc. Para no tener que sacar la explicación de cada uno, note que si
toma ese valor negativo (por ejemplo -1), lo vuelve positivo y le suma 10, le da el número que
debería ser.

Y ya. Ya somos expertos informáticos. Esto es como el Huevo de


Colón, muy difícil si no se sabe cómo se hace, pero termina
siendo una bobadita (ni tanto, pero decirlo me hace sentir
mejor).

Les prometí spoilers no?

Si este documento no le sirvió por favor absténgase de mencionar a mi madre en medio de sus
desahogos que ella no tuvo nada que ver y ni siquiera me ayudó

1
O sea 11 papi

También podría gustarte