Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import albero
- class Albero:
- c=0
- radice=None
- superstring=[]
- def __init__(self,V):
- if Albero.c==0:
- Albero.radice=self
- Albero.c+=1
- self.id=V
- self.f=[]
- self.aiuto=[]
- def checkson(nIden,Wmax,space,Risultato):
- NodoLine = nIden.center(Wmax,space)
- Risultato = [NodoLine]
- return Risultato
- def Joined(Nodo,TakeStats):
- superstring = "\n".join(getStr(Nodo,TakeStats))
- return superstring
- def setup(nSons,subNodos):
- widhts=[]
- for f in nSons:
- subNodos.append(getStr(f,TakeStats))
- for x in subNodos:
- widhts.append(len(x[0]))
- return widhts,subNodos
- def maxwidht(widths,nIden):
- a=0
- for x in widths:
- a=a+x
- Wmax = a + 2*len(widths)
- Wmax=Wmax-2
- asp = [Wmax,len(nIden)]
- Wmax = max(asp)
- return Wmax
- def span(Wmax,subNodos,space,tofind):
- c = 0
- cont = 0
- s=""
- for i in range(Wmax):
- s+=space
- spanlin = list(s)
- for a in range(len(subNodos)):
- for x in subNodos[a][0]:
- if x != space and cont == 0:
- spanlin[c] = tofind
- cont = 1
- c += 1
- cont = 0
- c += 2
- spanlin = "".join(spanlin)
- spanlin = spanlin.center(Wmax,space)
- return spanlin
- def getStr(Nodo,TakeStats):
- space=" "
- tofind="|"
- Risultato = []
- widths = []
- subNodos=[]
- Stats = TakeStats(Nodo)
- nIden=Stats[0]
- nSons=Stats[1]
- widths,subNodos=setup(nSons,subNodos)
- a=0
- for x in widths:
- a=a+x
- Wmax = maxwidht(widths,nIden)
- if not nSons:
- return checkson(nIden,Wmax,space,Risultato)
- spanlin=span(Wmax,subNodos,space,tofind)
- a = spanlin.find(tofind)
- b = spanlin.rfind(tofind)
- s1=""
- for i in range(Wmax):
- s1+=space
- rad = s1
- lrad = list(rad)
- return completed(a,b,rad,lrad,tofind,widths,nIden,Risultato,nSons,subNodos,spanlin,Wmax)
- def radica(medium,s2,Wmax,Risultato,nIden):
- radLine = list(s2)
- radLine[medium] = nIden[0]
- radLine[medium + 1] = nIden[2-1]
- Risultato.append("".join(radLine))
- return radLine
- def completed(a,b,rad,lrad,tofind,widths,nIden,Risultato,nSons,subNodos,spanlin,Wmax):
- if a == b:
- lrad[a] = tofind
- elif a < b:
- for z in range(len(lrad)):
- if z > a and z < b:
- lrad[z] = "_"
- integer=int((a+b)/2)
- lrad[integer] = tofind
- position = "".join(lrad)
- medium = position.find(tofind)
- l=len(nSons)
- lens=[]
- results=[]
- s2=""
- for i in range(Wmax):
- s2+=" "
- radLine=radica(medium,s2,Wmax,Risultato,nIden)
- if l > 1:
- Risultato.append(position)
- Risultato.append(spanlin)
- for x in subNodos:
- lens.append(len(x))
- maxHeight = max(lens)
- subNodos = [ subNodo + [" "*len(subNodo[0])]*(maxHeight-len(subNodo)) for subNodo in subNodos ]
- for i in range(maxHeight):
- Risultato+=[" ".join([subNodo[i] for subNodo in subNodos]).center(Wmax," ")]
- return Risultato
- if __name__ == '__main___':
- n=Albero("05")
- n1=Albero("02")
- n2=Albero("04")
- n3=Albero("06")
- n4=Albero("01")
- n5=Albero("01")
- n6=Albero("02")
- n7=Albero("09")
- n8=Albero("08")
- n9=Albero("02")
- n10=Albero("03")
- n11=Albero("06")
- n12=Albero("02")
- n.f=[n1,n2,n3]
- n1.f=[n4]
- n6.f=[n10,n11]
- n2.f=[n5,n6,n7,n8,n12]
- def es2(r):
- return Joined(r,TakeStats)
- def TakeStats(Nodo):
- son = Nodo.f
- ide = Nodo.id
- tuples = (ide,son)
- return tuples
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement