¡Bienvenido/a!

Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!

Torre de Hanoi

odmaldiodmaldi Fray Luis de León XVI
Juegos de informática para no informáticos.


Bueno, quizá no sean necesariamente de informática para los no-informáticos, pero tal vez no les sea tan difícil de resolver ya que sólo requieren de lógica. No es necesario programar o buscar el lado algorítmico para resolver, ni saber matemática avanzada. ¿Se arriesga?

Comienzo con la Torre de Hanoi. El enlace permite resolverlo de una forma interactiva. Pero, ¿qué es la Torre de Hanoi?
300px-Tower_of_Hanoi.jpeg

Este consiste de una serie de discos y tres torres. La meta es mover los discos, uno a la vez, y ordenarlos en la torre de enmedio de forma ascendiente de acuerdo al tamaño. Puesto que los discos son de un tamaño grande hasta el más chico, estos deben ordenarse tal cual formando un cono. Por ejemplo, el juego comienza con los discos en la primer torre como aparecen en la imagen de arriba. Luego, moviendo los discos de uno a uno de una torre a otra, deberán quedar en orden de tamaño (del más grande al más chico) en la torre del medio. La solución depende del número total de los discos.

Entre más discos, más movimientos se requieren, pero todo número de discos siempre tendrá un número mínimo requerido para resolverse. Por ejemplo, una torre de 3 discos puede resolverse en mínimo 7 movidas. Por lo tanto, la solución correcta es 7. Claro está que pueden hacerse más movidas, pero ahí ya se perdió el juego porque la respuesta mínima debe ser 7. Ganar el juego consiste en mover y organizar los discos haciendo las mínimas movidas posibles.

Entonces, las reglas a seguir son:

1. Mover solo un disco a la vez
2. Cada movida consiste en mover el disco de una torre y posicionarla en otra torre con el objetivo de ir ordenando en la torre de enmedio los discos de manera ascendiente. Sólo pueden moverse de manera que el disco de arriba siempre quede arriba, lo cual lleva a la tercer regla:
3. No puede ir un disco grande sobre uno chico. Siempre deben quedar en las torres los discos grandes debajo de los chicos y en orden de tamaño.

Entonces, supongamos que numeramos a los discos del 1 al 5, 1 siendo el más chico y 5 el más grande. Luego, las torres las denominamos A, B, y C.

Si el número mínimo de movimientos para 5 discos es 31.
A97Bzx4.jpg

¿Cuáles serían sus movimientos para ordenar los discos en mínimo 31 movidas?

Comentarios

  • odmaldiodmaldi Fray Luis de León XVI
    editado junio 2014
    Cruzar el río - Juego de lógica

    Tres caníbales y tres antropólogos deben cruzar un río. El bote que tienen es lo suficiente grande para dos personas solamente. Si en cualquier punto/momento hay más caníbales que antropólogos en un lado del río, los caníbales se comen a los antropólogos. ¿Qué pueden hacer los antropólogos para cruzar el río sin ser comidos por los caníbales?

    Recuerde, el bote debe ser remado para cruzarse de un lado a otro.

    Entonces:

    A - Antropólogos
    C - Caníbales
    ++ - Bote

    Río
    AAA |============|
    |++ |
    CCC |============|

    Deben cruzar el
    río
    |============| AAA
    | ++|
    |============| CCC

    Recuerde que no puede haber más caníbales que antropólogos en ningún momento, y siempre debe haber alguien en el bote para remar de regreso y recoger más personas. Tampoco puede decir que si hay un canibal en el otro lado del río, y si van un antropólogo y un canibal en el bote, que el antropólogo rápido será el que rema de regreso. Eso no cuenta, media vez esté del otro lado y estén los dos caníbales, igual se lo comerán. ¿Cómo lograría que crucen todos, siempre alguien remando de ida y de regreso, sin que se coman a los antropólogos?
  • odmaldiodmaldi Fray Luis de León XVI
    editado junio 2014
    Las 5 casas

    Hay una fila de cinco casas pintadas en cinco colores diferentes. En cada casa vive una persona con una nacionalidad diferente. Los propietarios beben un determinado tipo de bebida, fuman una determinada marca de cigarrillo, y mantienen un cierto tipo de mascota. Ningún dueño tiene la misma mascota, fuman la misma marca de cigarrillos o beben la misma bebida.

    Pregunta: ¿Quién es el dueño de los peces?

    Hay 15 pistas:
    1. El británico vive en la casa roja.
    2. El sueco tiene perros como mascotas.
    3. El danés bebe té.
    4. La casa verde está a la izquierda de la casa blanca.
    5. El dueño de la casa verde bebe café.
    6. La persona que fuma Pall Mall cría pájaros.
    7. El dueño de la casa amarilla fuma Dunhill.
    8. El hombre que vive la casa el centro bebe leche.
    9. El noruego vive en la primera casa.
    10. El hombre que fuma Blends vive al lado del que tiene gatos.
    11. El hombre que cría caballos vive al lado del que fuma Dunhill.
    12. El hombre que fuma Blue Masters toma cerveza.
    13. El alemán fuma Prince.
    14. El noruego vive al lado de la casa azul.
    15. El hombre que fuma Blends tiene de vecino del lado que bebe agua.
  • odmaldiodmaldi Fray Luis de León XVI
    editado junio 2014
    Agua, electricidad y gas para tres casas

    Un hombre ha construido tres casas. Cerca de ahí hay plantas de gas, agua y electricidad. El hombre desea conectar cada una de las tres casas a las plantas de gas, agua y electricidad. Desafortunadamente, las tuberías y los cables no pueden/no deben entrecruzarse.

    ¿Cómo conectaría cada una de las tres casas a las plantas de gas, agua y electricidad sin permitir que se entrecrucen las tuberías y cables?
    utility-lines-to-houses.png

    G = Gas
    W = Agua
    E = Electricidad
  • juanchojuancho Francisco de Quevedo s. XVII
    editado junio 2014


    Torres de Hanoi
    Solucion: Aplicar recursividad, uno de mis primeros programas. Primer año de universidad. Lo hice con PASCAL en una PC WANG allá por el año 86. Algunos lenguajes aceptan recursividad otros no.

    El de los PECES lo vi hace algunos años con cigarros.

    El otro de los caníbales si nunca lo vi.

    Gracias Odmaldi me has hecho acordar que tengo que llamar a unos colegas para tomar algo este viernes.




  • odmaldiodmaldi Fray Luis de León XVI
    editado junio 2014
    Gracias Odmaldi me has hecho acordar que tengo que llamar a unos colegas para tomar algo este viernes.

    Al menos para algo sirvo jajaja:D

    Creo que todos estos siempre los enseñan durante el primero o segundo semestre; son de rigor veo.

    Pasando a otra cosa, ¿qué tan difícil y útil es Pascal? Lo vi brevemente para una clase pero no me dio por aprenderlo. Era en uno de esos cursos obligatorios que le hacen tomar a una, "Programming Languages", para aprender sobre los lenguajes.
  • juanchojuancho Francisco de Quevedo s. XVII
    editado junio 2014
    Es un placer compartir esto.



    PASCAL es un lenguaje que posee potencialidad para mostrar didácticamente lo que se conoce como estructura de datos. Desde una lista, una cola (queue), un vector, una matriz,una pila (stack) y archivos.

    Mis primeros algoritmos los desarrollé en PASCAL. El trabajo de fin de curso fue realizar un editor de textos. Un editor con funciones de: grabar un texto, generar un backup, controlar las teclas de función y todo lo que poseía un editor de textos en aquellas épocas.



    El PASCAL es sencillo, yo le veo una mezcla de BASIC con C.



    En tercer año me encontré nuevamente con él, pero en un IDE. Se llamaba Turbo PASCAL y era de Borland igual me siguió gustando. No necesitaba manuales ni internet que aun no estaba al alcance de los estudiantes. Aquella vez el trabajo final fue realizar un ftp entre dos PC’s.



    Ahora le cuento a modo de anécdota dos hechos relacionados con el PASCAL:



    1.

    Pasado los años siendo ya un analista, estaba trabajando en una empresa que produce acero y me encontré con un sistema de contabilidad hecho en PASCAL. Que usaba una base de datos PARADOX.

    El señor que había “hecho” aquel sistema aparentemente creía que se había sacado la lotería con su producto. Cobraba de tres a cuatro cifras por pequeños cambios en su sistema.

    Resulta que la empresa había cambiado de nombre y se tenía que cambiar de nombre a la empresa en todos los reportes contables. El gerente general estaba escandalizado porque le querían cobrar algo de cinco mil dólares por aquel cambio, me llamó y me preguntó que se podía hacer. “Voy a revisar le dije”.

    PASCAL genera un archivo ejecutable compacto con extensión exe. En aquellos años no sé si seguirá, había un producto llamado PC TOOLS. Ese producto puede editar cualquier archivo. Decidí editar el ejecutable del sistema contable, encontré en el exe el nombre antiguo y lo cambié por el nuevo nombre directamente en el exe.

    Obviamente los programas fuentes los tenía el propietario del sistema y no nosotros.

    Cuando vio que el sistema emitía los reportes con el nombre cambiado, se volvió loco. Nos dijo que nos iba a denunciar por piratería. Nosotros solo nos reímos y cambiamos ese sistema por uno hecho en FOXPRO.

    2.

    Años después en una empresa de telecomunicaciones encontré un software hecho en DELPHI, revisando el código me di cuenta que era un PASCAL evolucionado con un entorno grafico para Windows. El software lo había hecho una persona que luego se convirtió en mi amigo, un tipo brillante. El software se utilizaba para hacer pruebas eléctricas en telefonía. Después de diez años de servicio le dieron de baja al producto.



    Finalmente



    Hace unos días en una exposición de tecnología conversé con un argentino que vendía un producto de gestión comercial para pequeñas y medianas empresas. Conversamos bastante y le pregunté por su producto, lo clásico que se pregunta en estos casos (creo yo). ¿Qué base de datos? y ¿Qué lenguaje de programación?



    Me dijo MySQL y python.



    -El MySQL no es problema es una Base de Datos como cualquier otra. ¿Pero python?



    El argentino me miró como enojado.



    -El python es el mejor lenguaje de programación. El java al lado del python es primitivo.



    Me reí y le dije que si el java es primitivo el cobol es un dinosaurio.



    -El cobol es una puteada…!



    Nos despedimos amistosamente, he leido algo de python y voy a intentar aprenderlo.



    Un saludo Odmaldi espero no haberla aburrido.
  • odmaldiodmaldi Fray Luis de León XVI
    editado junio 2014
    Qué buena respuesta. Muy buena.

    Para el #1:

    Así pasa en todas partes y casi en todas las profesiones relacionadas a la tecnología. Si le contara acá cuánto tengo que batallar con "desarrolladores" que realmente no lo son, y quieren cobrar miles por algo que se puede hacer en 15 minutos. Luego si trato de explicar a los clientes la razón porqué no necesitan pagar miles, piensan que no sé de lo que hablo, porque están acostumbrados a pagar gandes cantitades. La mentalidad es que es prestigioso pagar bastante por un buen trabajo; si un trabajo se hace por menos, uno es novato.

    2. Python es lo que se maneja ahora, sí, pero no es mejor que Java. Quizá lo que distingue a Python es que es más directo, más fácil. Ahora, utilizar Python con MySQL es no aprovechar la eficiencia de Python. Aunque quizá es cuestión de gustos, en lo personal diría que maneje Python con MongoDB; la misma página de Mongo le enseña a usarlo: https://university.mongodb.com/

    Coursera tiene un buen curso de Python, pero creo que la próxima clase es hasta el otoño. Pero acá tienen tutoriales buenos (básicos). Creo que no se puede descartar ningún lenguaje, todo es cuestión de utilidad y gustos (y qué es lo que se busca desarrollar).
  • juanchojuancho Francisco de Quevedo s. XVII
    editado junio 2014
    Odmaldi

    Gracias por la información acerca de MongoDB, no había escuchado de esa BD.

    Es agradable compartir esta información y estas experiencias.

    Un Saludo.
Accede o Regístrate para comentar.


Para entrar en contacto con nosotros escríbenos a informa (arroba) forodeliteratura.com