Ir al contenido principal

Hanoi.... para las masas

Un problema muy típico de lenguaje de programación es la muy conocida estructura de torres de hanoi. Es algo básico que tiene cualquier programador.

El programa trata de despertar la recursividad (recurrencia) que está en el programador para mostrarle la solución sencilla a un problema aparentemente complejo:

En suma, se tienen 3 torres con 3 anillos de diferente tamaño colocados en orden:



La idea es llevar los 3 anillos de la primera a la última torre con dos reglas muy sencillas:

- No se puede llevar varios anillos a la vez, tiene que ser de uno en uno
- El anillo que coloques en una torre debe estar obligatoriamente sobre otro más grande

El problema típico es hacer un programa que, como input=3 obtengas:

De 1 a 3
De 1 a 2
De 3 a 2

De 1 a 3

De 2 a 1
De 2 a 3
De 1 a 3

Lo partimos así porque el primer bloque es en realidad hanoi con 2 anillos llevando de torre 1 a torre 2, vamos a ponerlo: hanoi(2, t1, t2)

El tercer bloque es en realidad hanoi con 2 anillos llevando de torre 2 a torre 3: hanoi(2, t2, t3)

La solución general es entonces para n anillos de torre 1 a torre 3:

hanoi(n-1, t1, t2)
hanoi(1, t1, t3)
hanoi(n-1, t2, t3)

Aquí tienen una solución con Java, Swing y con log4j (para que vayamos creando la costumbre de hacerlo con esto). La estructura es lo más importante.

Espero lo disfrutes!!

Comentarios

Entradas más populares de este blog

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación. En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible. Qué es? Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente: Un servidor de colas : es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final. Un tablero de control de colas : una serie de ...

Instalaste Docker y se come espacio en tu disco

Básicamente este post traduce la ayuda que vi en la siguiente página: https://stackoverflow.com/questions/62441307/how-can-i-change-the-location-of-docker-images-when-using-docker-desktop-on-wsl2 Entonces, la instalación que hice en mi máquina fue la siguiente: Activar Virtualización en el BIOS Instalar Docker Elegir que el motor linux se manejará con WSL2 En este caso tenemos dos cosas a tomar en cuenta: El archivo de SWAP que utiliza docker para los contenedores El archivo donde se guardan todas las imágenes. En ambos casos el lugar de los archivos que se usan están en la carpeta del usuario. A veces este lugar puede crecer mucho y nos quedamos sin espacio en disco. Liberando el SWAP de docker Primeramente vamos a parar el servicio de docker. Luego, En la carpeta del usuario se encuentra un archivo llamado .wslconfig. Solamente se lo debe editar y cambiar la línea # Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx swapfile=E:\\temp\\wsl-swap.v...

Con la vejez a cuestas, dos

 Indefectiblemente cuando se hace cualquier retrospectiva, uno no puede dejar de arrepentirse de algunas cosas. A veces lo decimos muy bajito y solamente lo escucha nuestro subconsciente; otras veces hasta lo escribimos. Pero en todo caso, siendo un poco sinceros con nosotros mismos, siempre tenemos esas astillas de arrepentimiento en diferentes ámbitos. Este cuento tiene que ver con el ámbito profesional, aunque está bastante influído por otros ámbitos en mi vida. Siempre sentí fascinación por lo lógico que se sentía programar. El poder entender las cosas de manera tan cristalina; de estar tan seguro que una cosa iba a funcionar muchísimo antes de que se pusiera la primera línea de código. Todas las piezas de lego se encuentran ante tus ojos y, con la ayuda de unas cuantas teclas puedes moverlas y ponerlas juntas, separarlas, volverlas dinámicas, cambiarles absolutamente todo. Es tan poco natural el ver el potencial de creación y no hacer nada. Así que lo más normal es ponerse a h...