Advertisement
lameski

Untitled

Jun 10th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. Discounts NP
  2.  
  3. import java.io.InputStream;
  4. import java.util.ArrayList;
  5. import java.util.Comparator;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Scanner;
  10. import java.util.Set;
  11. import java.util.TreeMap;
  12. import java.util.TreeSet;
  13. import java.util.stream.Collectors;
  14.  
  15. /**
  16. * Discounts
  17. */
  18. class Product {
  19. int price;
  20. int discountedPrice;
  21.  
  22. public Product(int discountedPrice, int price) {
  23. this.discountedPrice = discountedPrice;
  24. this.price = price;
  25. }
  26.  
  27. public static Product ofString(String product) {
  28. String[] parts = product.split(":");
  29. return new Product(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
  30. }
  31.  
  32. public float discount() {
  33. return (float) (1 - (discountedPrice *1.00 / price));
  34. }
  35.  
  36. public int absoluteDiscount() {
  37. return price - discountedPrice;
  38. }
  39.  
  40. @Override
  41. public String toString() {
  42. return String.format("%2d%% %d/%d", discount(), discountedPrice, price);
  43. }
  44. }
  45. class Store //implements Comparable<Store>
  46. {
  47. String name;
  48. ArrayList<Product> products;
  49.  
  50. public Store(String name, ArrayList<Product> products)
  51. {
  52. this.name = name;
  53. this.products = products;
  54. }
  55.  
  56. public String getName()
  57. {
  58. return name;
  59. }
  60. public Integer numProducts()
  61. {
  62. return products.size();
  63. }
  64. public double[] getDiscounts()
  65. {
  66. double dis[] = new double[products.size()];
  67. int i=0;
  68. for(Product m : products)
  69. {
  70. dis[i++] = m.discount();
  71. }
  72. return dis;
  73. }
  74. public double getAvgDis()
  75. {
  76. double sum = 0;
  77.  
  78. for(double d : this.getDiscounts())
  79. sum+=d;
  80. return sum*100/this.numProducts();
  81. }
  82.  
  83. public int totalDiscount()
  84. {
  85. int sum = 0;
  86. for(Product i : products)
  87. {
  88. sum+= i.absoluteDiscount();
  89. }
  90. return sum;
  91. }
  92.  
  93. @Override
  94. public String toString() {
  95. // TODO Auto-generated method stub
  96. StringBuilder sb = new StringBuilder();
  97.  
  98. sb.append(name);
  99. sb.append("\n");
  100.  
  101. sb.append(String.format("Average discount: %.1f%%\n", this.getAvgDis()-1));
  102. sb.append(String.format("Total discount: %d\n", this.totalDiscount()));
  103.  
  104. products.stream().sorted(Comparator.comparing(Product::discount).reversed())
  105. .forEach(i -> {
  106. //double procent = 100*((1- i.discountedPrice*1.00/i.price));
  107. sb.append(String.format("%2.0f%% %d/%d\n", i.discount()*100, i.discountedPrice, i.price));
  108. });;
  109. /*for(Product i : products)
  110. {
  111. double procent = 100*((1- i.discountedPrice*1.00/i.price));
  112. sb.append(String.format("%2.0f%% %d/%d\n", procent, i.discountedPrice, i.price));
  113. }
  114. */
  115. sb.deleteCharAt(sb.toString().length()-1);
  116. return sb.toString();
  117. }
  118.  
  119.  
  120.  
  121.  
  122. }
  123. class Discounts
  124. {
  125. ArrayList<Store> stores;
  126. Discounts()
  127. {
  128. this.stores = new ArrayList<>();
  129. }
  130. public int readStores(InputStream input)
  131. {
  132. Scanner in = new Scanner(input);
  133. int count = 0;
  134. while(in.hasNextLine())
  135. {
  136. String [] line = in.nextLine().split("\\s+");
  137. String name = line[0];
  138. ArrayList<Product> products = new ArrayList<>();
  139. for(int i=1; i<line.length; i++)
  140. {
  141. String[] split = line[i].split(":");
  142. Product p = new Product(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
  143. products.add(p);
  144. }
  145.  
  146. stores.add(new Store(name, products));
  147. count++;
  148. }
  149. return count;
  150.  
  151.  
  152. }
  153.  
  154. public List<Store> byAverageDiscount()
  155. {
  156. return stores.stream().sorted(Comparator.comparing(Store::getAvgDis).reversed()
  157. .thenComparing(Store::getName)).limit(3).collect(Collectors.toList());
  158.  
  159. }
  160.  
  161. public List<Store> byTotalDiscount()
  162. {
  163. return stores.stream().sorted(Comparator.comparing(Store::totalDiscount).reversed()
  164. .thenComparing(Store::getName)).limit(3).collect(Collectors.toList());
  165. }
  166. }
  167.  
  168.  
  169. public class DiscountsTest {
  170. public static void main(String[] args) {
  171. Discounts discounts = new Discounts();
  172. int stores = discounts.readStores(System.in);
  173. System.out.println("Stores read: " + stores);
  174. System.out.println("=== By average discount ===");
  175. discounts.byAverageDiscount().forEach(System.out::println);
  176. System.out.println("=== By total discount ===");
  177. discounts.byTotalDiscount().forEach(System.out::println);
  178. }
  179. }
  180.  
  181. // Vashiot kod ovde
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement