SHARE
TWEET

laal

a guest Nov 17th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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))
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top