From 4901dc02a8ec6205c0bbae497cf383e8a07d80d4 Mon Sep 17 00:00:00 2001 From: Mintas Date: Thu, 3 Mar 2016 13:06:16 +0300 Subject: [PATCH] updated solution; --- src/Main.java | 1 - src/knapsack/GreedyBoundedKnapsackSolver.java | 13 +++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Main.java b/src/Main.java index d7ade3e..3af6268 100644 --- a/src/Main.java +++ b/src/Main.java @@ -24,7 +24,6 @@ private static void printSolution(JackSparrowHelper jackSparrowHelper) { System.out.println(abr.calculateAveragePrice() + " REAL AVG: " + getAvg(abr)); System.out.println("amount: " + getGallons(abr)); - //abr.getPurchases().forEach(p -> System.out.println(p.getTotalPrice())); System.out.println("TOTAL is: " + abr.getPurchases().stream().mapToDouble(Purchase::getTotalPrice).sum()); } diff --git a/src/knapsack/GreedyBoundedKnapsackSolver.java b/src/knapsack/GreedyBoundedKnapsackSolver.java index bc64b98..379ab67 100644 --- a/src/knapsack/GreedyBoundedKnapsackSolver.java +++ b/src/knapsack/GreedyBoundedKnapsackSolver.java @@ -48,14 +48,19 @@ private Purchase decidePurchase(int needGallons, List commodities, bo private Purchase bestForCommodity(Commodity cmdty, int needGallons, boolean min) { int canTake = min(cmdty.getAmountLeft(), needGallons); + int canTakeByServings = getCanTakeByServings(cmdty, canTake, min); + if (canTakeByServings == 0) return null; + + cmdty.decreaseAmount(canTakeByServings); + return new Purchase(cmdty.getSource(), canTakeByServings, cmdty.getAvgPrice()); + } + + private int getCanTakeByServings(Commodity cmdty, int canTake, boolean min) { int canTakeByServings = (canTake / cmdty.getServingSize()) * cmdty.getServingSize(); if ((min && canTake < cmdty.getMinSize())) { canTakeByServings = cmdty.getAmountLeft()>=cmdty.getMinSize() ? cmdty.getMinSize() : canTakeByServings; } - if (canTakeByServings == 0) return null; - - cmdty.decreaseAmount(canTakeByServings); - return new Purchase(cmdty.getSource(), canTakeByServings, cmdty.getAvgPrice()); + return canTakeByServings; } }