Advertisement
EXTREMEXPLOIT

Assign Best Package

Nov 16th, 2020 (edited)
498
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.98 KB | None | 0 0
  1.     public void assignBestPackage(LinkedList<Package> packageList){ // Para una lista de los packages disponibles, con las medidas del Item, nos dirá que package es mejor.
  2.         Package bestPackage = null;
  3.         Double bestDifferenceMean = 0.0;
  4.         if (this.getSize()[2] < 3){ // Si nuestro item tiene una profundidad menor que 3, significa que se puede empaquetar en un 'Envelope'.
  5.             // Para una LinkedList de Packages, nos devuelve aquellos elementos que son Envelopes, como esta función transforma packageList a una lista, ya no tenemos una LinkedList.
  6.             // El no tener una LinkedList no es un problema, ya que esta lista simplemente sirve para recorrerla, no hará falta modificarla.
  7.             List<Package> envelopesList = packageList.stream().filter(e -> e instanceof Envelope).collect(Collectors.toList());
  8.             for (int i=0; i<envelopesList.size(); i++){
  9.                 Envelope currentEnvelope = (Envelope) envelopesList.get(i);
  10.                 // A continuación calcularemos la diferencia que hay entre la altura y la anchura de nuestro paquete, respecto el envoltorio.
  11.                 Double xDifference = currentEnvelope.getWidth() - this.getSize()[0]; Double yDifference = currentEnvelope.getHeight() - this.getSize()[1];
  12.                 if (xDifference >= 0 && yDifference >= 0){ // Si nuestro paquete cabe en el envoltorio.
  13.                     Double differenceMean = (xDifference + yDifference) / 2; // Calculamos la media de la diferencia.
  14.                     if (differenceMean < bestDifferenceMean || bestPackage == null){ // Si es la mejor media que hemos tenido o no hemos asignado aún ningún paquete, este es el nuevo mejor paquete.
  15.                         bestDifferenceMean = differenceMean;
  16.                         bestPackage = currentEnvelope;
  17.                     }
  18.                 }
  19.             }
  20.         }
  21.         else{ // En caso de que nuestro paquete no se pueda enpaquetar en un 'Envelope'.
  22.             // En este caso, filtraremos nuestra LinkedList de packages para obtener las que son cajas.
  23.             List<Package> boxesList = packageList.stream().filter(e -> e instanceof Box).collect(Collectors.toList());
  24.             for (int i=0; i<boxesList.size(); i++){
  25.                 Box currentBox = (Box) boxesList.get(i);
  26.                 Double xDifference = currentBox.getWidth() - this.getSize()[0];
  27.                 Double yDifference = currentBox.getHeight() - this.getSize()[1];
  28.                 Double zDifference = currentBox.getDepth() - this.getSize()[2];
  29.                 if (xDifference >= 0 && yDifference >= 0 && zDifference >= 0){
  30.                     Double differenceMean = (xDifference + yDifference + zDifference) / 3;
  31.                     if (differenceMean < bestDifferenceMean || bestPackage == null){
  32.                         bestDifferenceMean = differenceMean;
  33.                         bestPackage = currentBox;
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.         this.setPack(bestPackage);
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement