@@ -38,33 +38,65 @@ private Trade getTrade(Trade[] trades, String key) {
38
38
39
39
CountMap <String > created = new CountMap <>();
40
40
private int findCost (Trade [] trades , Item buyingItem , CountMap <String > leftOver ) {
41
+ if (buyingItem .item .equals ("ORE" ))
42
+ return buyingItem .amount ;
41
43
Trade fuelTrade = getTrade (trades , buyingItem .item );
42
44
int timesApplied = (int )Math .ceil ((double )buyingItem .amount /(double )fuelTrade .output .amount );
43
- leftOver .increment (fuelTrade .output .item , buyingItem .amount % fuelTrade .output .amount );
44
45
45
- //System.out.println(fuelTrade.output.item+" nLeftOver "+leftOver.get(fuelTrade.output.item));
46
+ System .out .println ("Buy " +timesApplied +"x" +fuelTrade .output .amount +" " +buyingItem .item );
47
+
48
+ /*if(leftOver.get(fuelTrade.output.item) >= fuelTrade.output.amount) {
49
+ System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
50
+ leftOver.increment(fuelTrade.output.item, -fuelTrade.output.amount);
51
+ System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
52
+ //skip = fuelTrade.output.item;
53
+ //System.out.println("Enough "+fuelTrade.output.item+" !");
54
+ timesApplied--;
55
+ //return 0; //You have this material, so you get it for free :)
56
+ }*/
57
+ //leftOver.increment(fuelTrade.output.item, buyingItem.amount % fuelTrade.output.amount);
58
+
46
59
int totalCost = 0 ;
47
- for (int i = 0 ; i <timesApplied ; i ++) {
48
- for (Item cost : fuelTrade .input ) {
49
- if (leftOver .get (cost .item ) >= cost .amount ) {
50
- leftOver .increment (fuelTrade .output .item , -fuelTrade .output .amount );
51
- //skip = fuelTrade.output.item;
52
- System .out .println ("Enough " +fuelTrade .output .item +" LEFTOVER!" );
53
- continue ;
54
- }
55
- if (cost .item .equals ("ORE" )) {
56
- totalCost +=cost .amount ;
57
- System .out .println ("Spend " +cost .amount +" ORE to get " +fuelTrade .output .amount +" " +fuelTrade .output .item );
58
- } else {
59
- totalCost +=findCost (trades , new Item (cost .amount , cost .item ), leftOver );
60
- }
61
- }
60
+ for (int i = 0 ; i <timesApplied ; i ++) {
61
+ /*if(leftOver.get(fuelTrade.output.item) >= fuelTrade.output.amount) {
62
+ System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
63
+ leftOver.increment(fuelTrade.output.item, -fuelTrade.output.amount);
64
+ System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
65
+ //skip = fuelTrade.output.item;
66
+ System.out.println("Enough "+fuelTrade.output.item+" LEFTOVER!");
67
+ continue;
68
+ }*/
69
+ totalCost = applyTrade (trades , fuelTrade , totalCost , leftOver );
62
70
created .increment (buyingItem .item , fuelTrade .output .amount );
63
71
}
72
+
73
+ leftOver .increment (buyingItem .item , buyingItem .amount % fuelTrade .output .amount );
74
+ System .out .println (fuelTrade .output .item +" nLeftOver " +leftOver .get (fuelTrade .output .item ));
64
75
System .out .println ("Bought " +(timesApplied *fuelTrade .output .amount )+" " +buyingItem .item +" for " +totalCost );
65
76
//System.out.println(fuelTrade.output.item+" costs "+totalCost+" times "+timesApplied);
66
77
return totalCost ;
67
78
}
79
+
80
+ private int applyTrade (Trade [] trades , Trade fuelTrade , int totalCost , CountMap <String > leftOver ) {
81
+ for (Item cost : fuelTrade .input ) {
82
+ /*if(leftOver.get(cost.item) >= cost.amount) {
83
+ //System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
84
+ leftOver.increment(cost.item, -cost.amount);
85
+ //System.out.println("Leftover "+fuelTrade.output.item+" = "+leftOver.get(fuelTrade.output.item)+" for trade "+fuelTrade);
86
+ //skip = fuelTrade.output.item;
87
+ //System.out.println("Enough "+fuelTrade.output.item+" !");
88
+ continue; //You have this material, so you get it for free :)
89
+ }*/
90
+ if (cost .item .equals ("ORE" )) {
91
+ totalCost +=cost .amount ;
92
+ System .out .println ("Spend " +cost .amount +" ORE to get " +fuelTrade .output .amount +" " +fuelTrade .output .item +" in trade " +fuelTrade );
93
+ } else {
94
+ totalCost +=findCost (trades , new Item (cost .amount , cost .item ), leftOver );
95
+ //leftOver.increment(fuelTrade.output.item, cost.amount % fuelTrade.output.amount);
96
+ }
97
+ }
98
+ return totalCost ;
99
+ }
68
100
69
101
@ Override
70
102
public Object part2 () throws IOException {
0 commit comments