-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathC06P05.py
94 lines (65 loc) · 1.62 KB
/
C06P05.py
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Hanoi Tower Problem
class Disk:
# properties
size = 0
# constructor
def __init__(self, size):
self.size = size
# getSize method
def getSize(self):
return self.size
class Rod:
# properties
pile = []
# constructor
def __init__(self, diskList):
self.pile = diskList
# add new Disk
def push(self, disk):
return self.pile.append(disk)
def pop(self):
lastElemnt = self.pile[-1]
self.pile.pop()
return lastElemnt
def getElements(self):
return self.pile
def gameSetup(diskNumber, rodNumber):
pile1 = []
pile2 = []
pile3 = []
# for i in reversed(range(1, diskNumber)) :
for i in range(diskNumber, 0, -1):
newDisk = Disk(i)
pile1.append(newDisk)
return [Rod(pile1), Rod(pile2), Rod(pile3)]
# Solution
def problem():
diskNumber = 5
rodNumber = 3
rodListState = gameSetup(diskNumber, rodNumber)
for i in rodListState:
for j in i.getElements():
print(j.getSize())
# Asserts
diskGreen = Disk(2)
print(diskGreen.getSize())
pile = []
pile.append(diskGreen)
# print(pile)
rod1 = Rod(pile)
for i in rod1.getElements():
print(i.getSize())
# problem()
'''
Version recursiva
'''
def Hanoi(discos, TorreOrigen=1, TorreAuxiliar=2, TorreDestino=3):
if discos == 1:
print(TorreOrigen, "a", TorreDestino)
else:
Hanoi(discos - 1, TorreOrigen, TorreDestino, TorreAuxiliar)
print(TorreOrigen, "a", TorreDestino)
Hanoi(discos - 1, TorreAuxiliar, TorreOrigen, TorreDestino)
return
# Lo probamos con 3 discos
Hanoi(3)