Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. import albero
  2.  
  3. class Albero:
  4. c=0
  5. radice=None
  6. superstring=[]
  7.  
  8. def __init__(self,V):
  9. if Albero.c==0:
  10. Albero.radice=self
  11. Albero.c+=1
  12.  
  13. self.id=V
  14. self.f=[]
  15. self.aiuto=[]
  16.  
  17. def checkson(nIden,Wmax,space,Risultato):
  18. NodoLine = nIden.center(Wmax,space)
  19. Risultato = [NodoLine]
  20. return Risultato
  21.  
  22. def Joined(Nodo,TakeStats):
  23. superstring = "\n".join(getStr(Nodo,TakeStats))
  24. return superstring
  25.  
  26.  
  27. def setup(nSons,subNodos):
  28. widhts=[]
  29.  
  30.  
  31. for f in nSons:
  32. subNodos.append(getStr(f,TakeStats))
  33.  
  34.  
  35. for x in subNodos:
  36. widhts.append(len(x[0]))
  37.  
  38. return widhts,subNodos
  39.  
  40.  
  41.  
  42. def maxwidht(widths,nIden):
  43.  
  44. a=0
  45.  
  46. for x in widths:
  47. a=a+x
  48.  
  49. Wmax = a + 2*len(widths)
  50. Wmax=Wmax-2
  51.  
  52. asp = [Wmax,len(nIden)]
  53. Wmax = max(asp)
  54.  
  55. return Wmax
  56.  
  57.  
  58. def span(Wmax,subNodos,space,tofind):
  59. c = 0
  60. cont = 0
  61. s=""
  62.  
  63. for i in range(Wmax):
  64. s+=space
  65.  
  66. spanlin = list(s)
  67.  
  68.  
  69. for a in range(len(subNodos)):
  70. for x in subNodos[a][0]:
  71. if x != space and cont == 0:
  72. spanlin[c] = tofind
  73. cont = 1
  74. c += 1
  75. cont = 0
  76. c += 2
  77.  
  78.  
  79. spanlin = "".join(spanlin)
  80. spanlin = spanlin.center(Wmax,space)
  81.  
  82. return spanlin
  83.  
  84. def getStr(Nodo,TakeStats):
  85. space=" "
  86. tofind="|"
  87. Risultato = []
  88. widths = []
  89. subNodos=[]
  90. Stats = TakeStats(Nodo)
  91. nIden=Stats[0]
  92. nSons=Stats[1]
  93.  
  94.  
  95.  
  96. widths,subNodos=setup(nSons,subNodos)
  97.  
  98. a=0
  99.  
  100. for x in widths:
  101. a=a+x
  102.  
  103.  
  104.  
  105. Wmax = maxwidht(widths,nIden)
  106.  
  107.  
  108. if not nSons:
  109. return checkson(nIden,Wmax,space,Risultato)
  110.  
  111.  
  112. spanlin=span(Wmax,subNodos,space,tofind)
  113.  
  114.  
  115.  
  116. a = spanlin.find(tofind)
  117. b = spanlin.rfind(tofind)
  118. s1=""
  119. for i in range(Wmax):
  120. s1+=space
  121.  
  122. rad = s1
  123.  
  124. lrad = list(rad)
  125.  
  126. return completed(a,b,rad,lrad,tofind,widths,nIden,Risultato,nSons,subNodos,spanlin,Wmax)
  127.  
  128.  
  129. def radica(medium,s2,Wmax,Risultato,nIden):
  130. radLine = list(s2)
  131.  
  132. radLine[medium] = nIden[0]
  133. radLine[medium + 1] = nIden[2-1]
  134. Risultato.append("".join(radLine))
  135.  
  136. return radLine
  137.  
  138. def completed(a,b,rad,lrad,tofind,widths,nIden,Risultato,nSons,subNodos,spanlin,Wmax):
  139.  
  140. if a == b:
  141. lrad[a] = tofind
  142.  
  143. elif a < b:
  144.  
  145. for z in range(len(lrad)):
  146. if z > a and z < b:
  147. lrad[z] = "_"
  148. integer=int((a+b)/2)
  149. lrad[integer] = tofind
  150. position = "".join(lrad)
  151. medium = position.find(tofind)
  152.  
  153.  
  154.  
  155. l=len(nSons)
  156. lens=[]
  157. results=[]
  158. s2=""
  159.  
  160. for i in range(Wmax):
  161. s2+=" "
  162.  
  163.  
  164. radLine=radica(medium,s2,Wmax,Risultato,nIden)
  165.  
  166.  
  167. if l > 1:
  168. Risultato.append(position)
  169. Risultato.append(spanlin)
  170.  
  171. for x in subNodos:
  172. lens.append(len(x))
  173.  
  174. maxHeight = max(lens)
  175.  
  176. subNodos = [ subNodo + [" "*len(subNodo[0])]*(maxHeight-len(subNodo)) for subNodo in subNodos ]
  177.  
  178. for i in range(maxHeight):
  179. Risultato+=[" ".join([subNodo[i] for subNodo in subNodos]).center(Wmax," ")]
  180.  
  181. return Risultato
  182.  
  183.  
  184.  
  185.  
  186. if __name__ == '__main___':
  187.  
  188.  
  189. n=Albero("05")
  190. n1=Albero("02")
  191. n2=Albero("04")
  192. n3=Albero("06")
  193. n4=Albero("01")
  194. n5=Albero("01")
  195. n6=Albero("02")
  196. n7=Albero("09")
  197. n8=Albero("08")
  198. n9=Albero("02")
  199. n10=Albero("03")
  200. n11=Albero("06")
  201. n12=Albero("02")
  202.  
  203.  
  204. n.f=[n1,n2,n3]
  205. n1.f=[n4]
  206. n6.f=[n10,n11]
  207. n2.f=[n5,n6,n7,n8,n12]
  208.  
  209.  
  210.  
  211. def es2(r):
  212. return Joined(r,TakeStats)
  213.  
  214. def TakeStats(Nodo):
  215. son = Nodo.f
  216. ide = Nodo.id
  217.  
  218. tuples = (ide,son)
  219. return tuples
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement