Skip to content

Solución: ¡Felices vacaciones!

by en 30/06/2013

¡Hola a todos!

Con el mes de Julio llamando a la puerta, vamos a resolver el último acertijo de la temporada que os proponíamos el lunes pasado.

Os preguntábamos cuántas veces había que hacer copiar-pegar para conseguir escribir múltiples veces la misma línea, sabiendo que la teníamos escrita una única vez. Os poníamos el ejemplo de conseguir tener 10 veces la línea. La primera vez que hacemos copiar-pegar conseguimos tener la linea 2 veces; la segunda vez lo duplicamos, y conseguimos 4 lineas. La siguiente conseguimos 8, y finalmente copiamos y pegamos solo 2 líneas (y no las 8) para tener las 10. El resultado es que hemos copiado y pegado 4 veces.

Dexjjy nos dio su solución en los comentarios y… ¡acertó! En cada paso de “copiar-pegar” lo que estamos haciendo es duplicar el número de líneas, por lo que crecen de manera exponencial:

Veces copiar-pegar 0 1 2 3 4 5
Lineas conseguidas 1 (=20) 2 (=21) 4 (=22) 8 (=23) 16 (=24) 32 (=25)

En la tabla salta a la vista que con n ciclos de copiar-pegar conseguiremos 2n líneas en la salida. El acertijo nos pregunta lo opuesto: el número de ciclos conocido el número de líneas, por lo que necesitamos la operación inversa a elevar 2 a un número, y esa operación es el logaritmo en base 2.

La última cuestión a considerar es qué ocurre si no da justo. En el ejemplo que os poníamos, decíamos que para conseguir 10 líneas necesitamos 4 ciclos de copiar-pegar. En realidad con esos 4 ciclos podemos llegar hasta las 16 líneas; es por eso por lo que veíamos que en el último caso solamente copiábamos 2 líneas (para pasar de 8 a 10) y no todas las que teníamos disponibles (las 8). El logaritmo en base 2 de 10 es 3.32, y lo que queremos es conseguir el 4. Por tanto, como dijo Dexjjy, si el logaritmo no da justo hay que mirar el siguiente número natural.

El uso de logaritmos puede resultar un poco complicado si no se tiene un buen fondo matemático; además calcular el logaritmo en base 2 en un programa a veces no es tan fácil (si la librería sólo es capaz de calcular el logaritmo en base 10 o en base e).

Afortunadamente, hay una forma diferente de resolver el problema, ayudándonos de los números binarios. Al fin y al cabo, 1, 2, 4, 8, … son los números binarios 1, 10, 100, 1000, … Es posible utilizar este hecho (y la rapidez de los ordenadores rotando bits) para conseguir una solución más rápida, pues el cálculo del logaritmo en base dos (con decimales) lleva más tiempo.

Pero… os dejaremos el verano para que penséis en cómo hacerlo usando este truco 🙂 Y, como siempre, cuando lo tengáis podéis probar vuestra solución aquí.

Y, ahora ya sí, ¡¡que tengáis unas muy felices vacaciones!! Nos vemos a la vuelta 🙂

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: