Posts tagged Python

Solucionar les Torres de Hanoi en Python

pythonlogoCom ja sabreu, ja fa dies que porto intentant aprendre el llenguatge de programació Python, doncs bé, gràcies a l’esforç, ja començo a recollir els fruits i he fet el meu primer programa més o menys “decent”. Per a molts, el programa els hi semblarà completament inútil o bé el consideraran prescindible, ja que és força fàcil de fer, però a mi m’agrada.

El programa no fa res més enllà de donar la solució a l’antic joc de les Torres de Hanoi, que per qui no sàpiga que és aquest joc, es tracta de una base amb 3 pals clavats i en un dels pals hi ha n discs diferents, el més gros a baix de tot i el més petit a dalt. En definitiva, el joc tracta de moure aquests discs de un en un cap als altres pals, tenint en compte que un disc no pot estar en cap moment a sobre d’un altre disc més petit que ell, i el joc s’acaba quan s’aconsegueix traslladar tots els discs, ordenats de més petit a més gran, a un altre pal que no sigui l’inicial. Com que no m’explico molt bé i una imatge val més que 1000 paraules, en poso una per a que us feu una idea.

Torres de Hanoi

Bé, doncs finalment us deixo amb el codi Python que he escrit per a donar solució a aquest joc. Si proveu el codi, no fiqueu més de 12 discs, ja que al ser recursiu, crea un arbre de crides immens i pot ser que hagueu de tancar el programa per avorriment, ja que per solucionar el joc s’han de fer (2^n) – 1 moviments com a mínim, i en el cas de 25 discs, s’han de fer (2²⁵)-1 = 33.554.431 moviments, en canvi el cas de 3 discs es soluciona en (2³)-1 = 7 moviments.

Aprofito per ficar una petita taula amb la relació entre el nombre de discs i el mínim de moviments a executar:

  • 3 discs – 7 moviments
  • 4 discs – 15 moviments
  • 5 discs – 31 moviments
  • 6 discs – 63 moviments
  • 7 discs – 127 moviments
  • 8 discs – 255 moviments
  • 12 discs – 4095 moviments
# -*- coding: utf-8 -*-
#!/usr/bin/env python

__author__="decline"

def hanoi(num, origen, desti, temp):
    if(num == 1):
        print "Canvio peça "+ str(num) +" de "+ origen +" a "+ desti
    else:
        hanoi(num - 1, origen, temp, desti)
        print "Canvio peça "+ str(num) +" de "+ origen +" a "+ desti
        hanoi(num - 1, temp, desti, origen)

if __name__ == "__main__":
    print "::SOLUCIÓ A LES TORRES DE HANOI::"
    num = int(raw_input("Insereix el número de peces de la Torre de Hanoi: "))
    hanoi(num, 'A', 'B', 'C')

Per últim, cal dir que si sabeu alguna forma alternativa de crear el programa, només cal que la deixeu als comentaris, que accepto correccions. I si algú té alguna pregunta sobre el codi, que també la deixi als comentaris i ja intentaré solucionar els dubtes.

Fins la pròxima, salut!

Abandonament involuntari

Després d’aquest període d’abandonament del blog, intentaré reprendre l’activitat d’escriure amb mes o menys regularitat, ho he dit, intentaré.

Ara fa un mes exacte que vaig escriure l’última entrada, la de les IlerRol concretament, i entre “pitos” i flautes i altres feines relacionades amb els estudis no he pogut escriure. Però bé, ja he acabat els parcials, per tant no tinc que tornar a pensar en exàmens fins a febrer de l’any vinent. De moment, només sé que he aprovat 2 exàmens, de la resta encara no se res i de fet només tinc dubtes de si he aprovat càlcul.

I així que aquest dilluns (abans d’ahir) ja hem començat temari nou, el qual sortirà als pròxims exàmens de febrer.

Per altra banda se m’ha girat feina amb els jocs de rol, ara al pròxim dia 28 de novembre em toca dirigir una partida de sLAng, i encara no sé com sortirà, ja que és la primera vegada que dirigeixo una partida de rol, pero bé, si surt un desastre, tinc excusa.

I ara fa 2 dies que me dedicat a aprendre Python, seriosament. Tot el que fem a la classe de MTP (Metodologia i Tecnologia de la Programació) amb C++, a casa ho passo a Python i de moment el llenguatge m’encanta, ja tindré temps de trobar-li pros i contres.

I fins aquí tot, més endavant ja parlaré del nou Windows 7, del qual tinc la versió Professional gratuïta gràcies a la Universitat de Lleida i també altre programari de Microsoft, com el VisualStudio, el XNA, altres versions de Windows etc.

Fins una altra, salut!