Advertisement
Guest User

laal

a guest
Nov 17th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.48 KB | None | 0 0
  1.  
  2. import heapq as hq
  3. import math
  4.  
  5. class Bin:
  6. def __init__(self):
  7. self.list = []
  8.  
  9. def AñadirPlaca(self, item):
  10. self.list.append(item)
  11.  
  12. def suma(self):
  13. total = 0
  14. for elem in self.list:
  15. total += elem
  16. return total
  17.  
  18. def Mostrar(self):
  19. return self.list
  20.  
  21. def BinPacking(arreglo, areaPlancha):
  22. """ Returns list of bins with input items inside. """
  23. a = []
  24. a.append(Bin())
  25.  
  26. for item in arreglo:
  27.  
  28. añadir = False
  29.  
  30. for bin in a:
  31. if bin.suma() + item <= areaPlancha:
  32. bin.AñadirPlaca(item)
  33. añadir = True
  34. break
  35.  
  36.  
  37. if añadir == False:
  38. nuevo = Bin()
  39. nuevo.AñadirPlaca(item)
  40. a.append(nuevo)
  41.  
  42. arreglo = []
  43. for bin in a:
  44. arreglo.append(bin.Mostrar())
  45.  
  46. return(arreglo)
  47.  
  48.  
  49. def sumarareas(G):
  50. n = len(G)
  51. suma = 0
  52. for i in range(n):
  53. suma += G[i]
  54. return suma
  55.  
  56. def ordenamientoBurbuja(unaLista):
  57. for numPasada in range(len(unaLista)-1,0,-1):
  58. for i in range(numPasada):
  59. if unaLista[i]>unaLista[i+1]:
  60. temp = unaLista[i]
  61. unaLista[i] = unaLista[i+1]
  62. unaLista[i+1] = temp
  63. return unaLista
  64.  
  65. def Position(G):
  66. n = len(G)
  67. print(G[1])
  68. print(G)
  69.  
  70. def Ordenar(G):
  71. ordenado = sorted(G , key=lambda k: [k[0], k[1]],reverse=True)
  72. return ordenado
  73.  
  74. def SepararArea(arreglo):
  75. n=len(arreglo)
  76. a=[]
  77.  
  78. for i in range(n):
  79. a.append(arreglo[i][0])
  80.  
  81. return a
  82. def SepararTipo(arreglo):
  83. n=len(arreglo)
  84. a=[]
  85.  
  86. for i in range(n):
  87. a.append((arreglo[i][1],arreglo[i][2],arreglo[i][3]))
  88.  
  89. return a
  90.  
  91. def Unificar(G):
  92. ordenado=SepararArea(Ordenar(TC))
  93. n=len(ordenado)
  94. a=[]
  95. resultado=[]
  96. for i in range(n):
  97. a.append(ordenado[i])
  98. for i in range(n):
  99. for j in range(3):
  100. resultado.append(a[i][j])
  101. return resultado
  102.  
  103. #print(ordenado)
  104. #print(resultado)
  105. '''def Posicionar(G):
  106. u=Unificar(SepararArea(Ordenar(TC)))
  107. n=len(u)
  108. b = []
  109. cordenadas = []
  110. arrx = []
  111. arry = []
  112. arrz = []
  113. x = 0
  114. y = 0
  115. z = 0
  116. u3 = []
  117. #del(u[0])
  118. #arrx.append(x)
  119. for i in range(n):
  120. arrx.append(u[i])
  121. u.pop(0)
  122. #u2 = u.pop(0)
  123. #arry.append(u[i])
  124. #arrz.append(u[i])
  125. return u '''
  126. def posicionar(largo,ancho,alto,arreglo):
  127. n=len(arreglo)
  128. resultado=[]
  129. resultado.append([0,0,0])
  130. x=arreglo[2]
  131. y=arreglo[1]
  132. z=arreglo[2]
  133. q=30
  134. z2 = 0
  135. x2 = 0
  136. #while x<largo and y<ancho and z<alto:# Para que no sobrepase las dimensiones de la caja
  137.  
  138.  
  139.  
  140.  
  141. # while q < 5
  142.  
  143. for i in range(q):
  144. if z <= alto:
  145. resultado.append([0,0,z])
  146. z+=arreglo[2]
  147. else:
  148. if y <= ancho and z2 <= alto:
  149. resultado.append([0,y,z2])
  150. z2+=arreglo[2]
  151. a = len(resultado)
  152. d = resultado[a-1]
  153.  
  154.  
  155. #if z <= alto and d >= largo:
  156. # resultado.append([0,arreglo[1],z2])
  157. # z2+=arreglo[2]
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164. # if z >= alto and
  165. a = len(resultado)
  166. d = resultado[a-1]
  167. d2 = d[2]
  168.  
  169.  
  170.  
  171.  
  172. print(d2)
  173.  
  174.  
  175.  
  176. return resultado
  177.  
  178.  
  179. #print(posicionar(20,30,8,resultado))
  180.  
  181. with open('cortes.in') as f:
  182. contenedor = f.readline().strip()
  183. contenedor1, contenedor2,contenedor3 = [int(x) for x in contenedor.split(' ')]
  184. volume = contenedor1*contenedor2*contenedor3
  185. Medidas = []
  186. TC = []
  187. Areas = []
  188. OrdenarTC = []
  189. OrdenarS = []
  190. CantidadxTipo = []
  191. TipoxCaja = []
  192. xyz = []
  193. line = int(f.readline())
  194. for i in range(line):
  195. D = f.readline().strip()
  196. Q, T, X, Y, Z = [x for x in D.split(' ')]
  197. cantidad = int(Q)
  198. CantidadxTipo.append((cantidad))
  199. tipo = T
  200. xyz.append((int(X),int(Y),int(Z)))
  201. TipoxCaja.append((tipo))
  202. G = [[] for _ in range(cantidad)]
  203. OrdenarTC.append((int(X)*int(Y)*int(Z)))
  204. for j in range(cantidad):
  205. G[j].append(((tipo),(int(X),int(Y),int(Z))))
  206. TC.append(((int(X),int(Y),int(Z)),(int(X)*int(Y)*int(Z))))
  207. Medidas.append((int(X),int(Y),int(Z)))
  208. Areas.append((int(X)*int(Y)*int(Z)))
  209.  
  210. #print(G)
  211. #print(TC)
  212. #print(Areas)
  213. for k in range(line):
  214. OrdenarS.append((OrdenarTC[k],CantidadxTipo[k],TipoxCaja[k],xyz[k]))
  215. AreaTotal = sumarareas(Areas)
  216. Desperdicio = 100 -((AreaTotal/volume)*100)
  217. Usado = 100-Desperdicio
  218. #print(AreaTotal)
  219. #print(Usado)
  220.  
  221. hola = BinPacking(Areas, volume)
  222. #print(Posicionar(Unificar(SepararArea(Ordenar(TC)))))
  223.  
  224. #print(posicionar(20,30,3,Unificar(SepararArea(Ordenar(TC)))))
  225. #print(Medidas)
  226. #print(ordenamientoBurbuja(Areas))
  227.  
  228. #print(Position(Areas))
  229. #SepararArea(Ordenar(TC))
  230. #print(Unificar(SepararArea(Ordenar(TC))))
  231.  
  232. ### funciones para la cantidad y tipos
  233.  
  234. QTOrdenado = Ordenar(OrdenarS)
  235. #print(QTOrdenado)
  236. #for l in range(len(QTOrdenado)):
  237. #del(QTOrdenado[i][0])
  238. print(QTOrdenado)
  239. print(SepararTipo(QTOrdenado))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement