Advertisement
KeepCoding

SantasPresentFactory

Feb 18th, 2020
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.78 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class SantasPresentFactory {
  4.     public static void main(String[] args) {
  5.         Scanner scanner = new Scanner(System.in);
  6.  
  7.         ArrayDeque<Integer> materials = new ArrayDeque<>();
  8.         Arrays.stream(scanner.nextLine().split(" "))
  9.                 .mapToInt(Integer::parseInt)
  10.                 .forEach(materials::push);
  11.  
  12.         ArrayDeque<Integer> magics = new ArrayDeque<>();
  13.         Arrays.stream(scanner.nextLine().split(" "))
  14.                 .mapToInt(Integer::parseInt)
  15.                 .forEach(magics::offer);
  16.  
  17.         TreeMap<String, Integer> presents = new TreeMap<>(); // will be sorted by name ascending
  18.         HashMap<Integer, String> wishList = new HashMap<>();
  19.         wishList.put(150, "Doll");
  20.         wishList.put(250, "Wooden train");
  21.         wishList.put(300, "Teddy bear");
  22.         wishList.put(400, "Bicycle");
  23.         int counter = 0;
  24.  
  25.         while (!materials.isEmpty() && !magics.isEmpty()) {
  26.             int material = materials.peek();
  27.             int magic = magics.peek();
  28.  
  29.             int result = material * magic;
  30.  
  31.             if (wishList.containsKey(result)) {
  32.                 String item = wishList.get(result);
  33.                 materials.pop();
  34.                 magics.poll();
  35.  
  36.                 if (!presents.containsKey(item)) {
  37.                     presents.put(item, 1);
  38.                 } else {
  39.                     int countOfCurrentPresents = presents.get(item);
  40.                     countOfCurrentPresents++;
  41.                     presents.put(item, countOfCurrentPresents);
  42.                 }
  43.             } else if (result > 0) {
  44.                 materials.push(materials.pop() + 15);
  45.                 magics.poll();
  46.             } else if (result < 0) {
  47.                 int sum = materials.peek() + magics.peek();
  48.                 materials.pop();
  49.                 magics.poll();
  50. //                magics.push(sum);
  51.                 materials.push(sum);
  52.             } else if (result == 0) {
  53.                 if (materials.peek() == 0) {
  54.                     materials.pop();
  55.                 } else if (magics.peek() == 0) {
  56.                     magics.poll();
  57.                 }
  58.             }
  59.         }
  60.  
  61.         if (presents.containsKey("Doll") && presents.containsKey("Wooden train")
  62.                 || presents.containsKey("Teddy bear") && presents.containsKey("Bicycle")) {
  63.             System.out.println("The presents are crafted! Merry Christmas!");
  64.             if (!materials.isEmpty()) {
  65.                 System.out.print("Materials left: ");
  66.                 System.out.println(getArrayDequeAsString(", ", materials));
  67.             }
  68.             if (!magics.isEmpty()) {
  69.                 System.out.print("Magic left: ");
  70.                 System.out.println(getArrayDequeAsString(", ", magics));
  71.             }
  72.         } else {
  73.             System.out.println("No presents this Christmas!");
  74.             if (!materials.isEmpty()) {
  75.                 System.out.print("Materials left: ");
  76.                 System.out.println(getArrayDequeAsString(", ", materials));
  77.             }
  78.             if (!magics.isEmpty()) {
  79.                 System.out.print("Magic left: ");
  80.                 System.out.println(getArrayDequeAsString(", ", magics));
  81.             }
  82.  
  83.         }
  84.  
  85.         for (Map.Entry<String, Integer> nameCount : presents.entrySet()) {
  86.             System.out.printf("%s: %d%n", nameCount.getKey(), nameCount.getValue());
  87.         }
  88.     }
  89.  
  90.     static String getArrayDequeAsString(String delimiter, ArrayDeque<Integer> arrayDeque) {
  91.         StringBuilder result = new StringBuilder();
  92.         for (Integer integer : arrayDeque) {
  93.             result.append(integer).append(delimiter);
  94.         }
  95.  
  96.         return result.substring(0, result.lastIndexOf(delimiter)); // return everything except last delimiter
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement