1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
# Fonction récursive qui déplace les pions d'une tour x vers une tour y
# Paramètres entrée :
# nb de pions à déplacer
# tour de départ
# tour d'arrivée
# tour intermédiaire (facultatif)
# Valeur sortie : aucune
def deplace(nb, tab, dep, arr, int=None):
global mvt
if nb == 1:
# Ici on est en fin de récursivité Il ne reste plus qu'un seul pion à déplacer
tab[dep]-=1
tab[arr]+=1
mvt+=1
# On affiche le mouvement et on quitte la fonction
print "Mvt %d: %d %d: Etat: %s" % (mvt, dep + 1, arr + 1, tab)
return
# if
nb-=1
# Déplacement récursif des pions restants de la tour de départ vers la tour intermédiaire
# La tour d'arrivée servira de tour de rangement provisoire
deplace(nb, tab, dep, int, arr)
# Déplacement du dernier pion de la tour de départ vers la tour d'arrivée
deplace(1, tab, dep, arr)
# Déplacement récursif des pions restants de la tour intermédiaire vers la tour d'arrivée
# La tour de départ servira de tour de rangement provisoire
deplace(nb, tab, int, arr, dep)
# deplace()
# Programme principal
# Initialisation tours et compteur de mouvements
mvt=0
tour=[int(sys.argv[1]), 0, 0]
# Affichage position de départ
print "Départ: %s" % tour
# Lancement mouvement de la tour 1 vers la tour 3 en utilisant la tour 2 comme intermédiaire
deplace(tour[0], tour, 0, 2, 1) |
Partager