Skip to content

Solución: Intentando ver a los Reyes Magos

by en 12/01/2014

¡Hola a todos!

¿Qué tal la vuelta a la realidad tras las vacaciones? ¿Todavía os queda turrón en el armario? 🙂

Tras una semana dándole vueltas, ya sabemos por qué fuimos incapaces de ver a los Reyes Magos, tal y como os contábamos en el último acertijo. Os explicábamos que en nuestro barrio los Reyes iban a seguir el siguiente itinerario:

..
5 25 ↑ 24 ← 23 ← 22 ← 21 ←
4 10 → 11 → 12 → 13 ↓ 20 ↑
3 9 ↑ 8 ← 7 ← 14 ↓ 19 ↑
2 2 → 3 ↓ 6 ↑ 15 ↓ 18 ↑
1 1 ↑ 4 → 5 ↑ 16 → 17 ↑
1 2 3 4 5

Empezando por la casa número 1, iban a “seguir las flechas”, visitando las casas en el orden indicado, parando en cada una únicamente un segundo. Os preguntábamos las coordenadas de la casa en la que estarían los Reyes en los segundos 30, 100 y 3660, para poder colocarnos estratégicamente y verles repartir regalos.

David nos dio su respuesta y… ¡acertó! algo que confirmó luego Gualterio. David, puedes estar seguro de que no eres el “pesado de turno” 😉 ¡Muchas gracias a ambos por comentar!

Para todos los demás, vamos a ver cómo se resolvía el acertijo. Además, David, daremos un pequeño truco para que el código, si se programa la solución, quede un poco “menos feo” 🙂

En primer lugar, es importante darse cuenta de que los Reyes siguen un camino “por niveles”, rodeando las viviendas ya visitadas. Si marcamos esos niveles, el recorrido queda:

..
5 25 ↑ 24 ← 23 ← 22 ← 21 ←
4 10 → 11 → 12 → 13 ↓ 20 ↑
3 9 ↑ 8 ← 7 ← 14 ↓ 19 ↑
2 2 → 3 ↓ 6 ↑ 15 ↓ 18 ↑
1 1 ↑ 4 → 5 ↑ 16 → 17 ↑
1 2 3 4 5

Viendo esto, cuando nos preguntan por la posición de los Reyes en un segundo determinado, lo primero que nos interesará saber es en qué “nivel” se encuentran, y luego los colocaremos en la casa concreta de ese nivel.

Obviamente, para llegar a un determinado nivel, antes tendrán que haber recorrido todas las viviendas de los niveles anteriores. Por ejemplo, para llegar al primer nivel marcado de color claro (casas 2, 3 y 4) se tiene que haber pasado por la casa 1. Para llegar al segundo nivel de color oscuro (casas 5, …, 9) se tienen que haber recorrido las casas de los dos niveles anteriores, 1..4. Y así sucesivamente.

Mirando la tabla, salta a la vista que cada nivel tiene debajo un cuadrado completo de casas. Por tanto, el primer nivel (la casa 1) tiene 0 casas antes. Por su parte, para llegar al segundo nivel es necesario haber recorrido antes 1 casa (1²); para llegar al tercero hay que haber recorrido 4 (2²); para llegar al cuarto, 9 (3²), etcétera.

Por tanto, para saber cuántos niveles se han recorrido completos basta con utilizar la raíz cuadrada del número de segundos que nos piden. Pero aquí hay un problema. En los segundos número 3 y número 4 estamos en el mismo nivel, según el esquema, y sin embargo sus raices cuadradas son diferentes. Esto se debe a que los cuadrados perfectos (1, 4, 9, …) son los últimos de cada nivel, cuando querríamos que fueran los primeros pues son los que cambian su raíz cuadrada y los que nos marcarían los cambios de nivel. Este es el motivo por el que el código de David quedaba un poco “más feo”, y aquí va el truco. Vamos a restar 1 a todos los números, de modo que si nos preguntan por la posición en el segundo 30, en realidad calcularemos la posición en el segundo 29, pero con todo desplazado. Así empezaremos a contar por 0, y no por 1, que da resultados mucho más razonables cuando se tienen que realizar operaciones. El esquema general ahora queda:

..
4 24 ↑ 23 ← 22 ← 21 ← 20 ←
3 9 → 10 → 11 → 12 ↓ 19 ↑
2 8 ↑ 7 ← 6 ← 13 ↓ 18 ↑
1 1 → 2 ↓ 5 ↑ 14 ↓ 17 ↑
0 0 ↑ 3 → 4 ↑ 15 → 16 ↑
0 1 2 3 4

Fijaos que hemos restado 1 tanto a los números de las casas (el segundo en el que son visitadas) como a los ejes (x,y). Por tanto, con este esquema lo primero que tendremos que hacer es restar 1 al número de segundo que nos pidan, y, al acabar, sumar 1 a las coordenadas que calculemos. Lo bueno es que ahora para saber en qué nivel estamos (empezando a contar por 0) basta hacer la raíz cuadrada, sin preocuparnos de casos especiales como le ocurría a David. Por ejemplo, en el nivel número 2 (el tercero) los números son 4, 5, 6, 7 y 8. La raíz cuadrada (quitando los decimales) de todos ellos es 2. Por su parte, los números del nivel 3 (9, …, 15) tienen como raíz cuadrada 3.

Saber el nivel de la casa visitada en un determinado segundo es importante porque de hecho ¡nos da ya una de las coordenadas!. O bien la x o bien la y es precisamente el número del nivel en el que estamos. Para averiguar cuál de las dos es, y para averiguar la otra, necesitamos saber en qué sentido nos estamos moviendo. Para eso, utilizamos la paridad del nivel:

  • En los niveles pares (0, 2, 4, …) la primera casa visitada está abajo a la derecha, y nos movemos primero hacia arriba y luego hacia la izquierda. En la primera mitad del recorrido de ese nivel, la coordenada x es el número del nivel, y en la segunda mitad la coordenada y es el número del nivel.
  • En los niveles impares (1, 3, 5, …) la primera casa visitada está arriba a la izquierda, y nos movemos primero hacia la derecha y luego hacia abajo. En la primera mitad del recorrido de ese nivel, la coordenada y es el número del nivel, y en la segunda mitad lo es la coordenada y.

Con esto ¡ya casi lo tenemos! Para saber en qué mitad del recorrido del nivel actual estamos, necesitamos conocer la distancia a la primera casa, es decir al cuadrado de la raíz cuadrada 🙂 Por ejemplo, tras 19 segundos repartiendo regalos (empezando a contar en 0, claro), los reyes estarán en el nivel 4 (raíz cuadrada de 19), y habrán visitado ya, sin contar la actual, 3 casas (19-4²).

El resto ya ¡es fácil! El número de casas de cada nivel es fácil de conocer, por lo que es fácil saber en qué mitad estamos, y usar la distancia para averiguar la coordenada que nos falta. Pero eso… os lo dejamos a vosotros 🙂 Como siempre, si queréis intentarlo y probar vuestra solución, podéis hacerlo aquí.

¡Si hubiéramos sabido todo esto a tiempo quizá hubiéramos podido ver a los Reyes! Tendremos que esperar al año que viene 🙂

¡Hasta mañana!

Anuncios

From → Soluciones

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: