Advertisement
LardaX

CubicAssault

Feb 11th, 2017
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.48 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6.  
  7. public class CubicAssault {
  8.     public static void main(String[] args) throws IOException {
  9.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  10.         Map<String, Map<String, Long>> regions = new HashMap<>();
  11.  
  12.         String[] input = reader.readLine().split(" -> ");
  13.  
  14.         while (!"Count em all".equals(input[0])) {
  15.             String region = input[0];
  16.             String meteorType = input[1];
  17.             Long amount = Long.parseLong(input[2]);
  18.  
  19.             if (!regions.containsKey(region)) {
  20.                 Map<String, Long> meteors = new HashMap<>();
  21.                 meteors.put("Green", 0L);
  22.                 meteors.put("Red", 0L);
  23.                 meteors.put("Black", 0L);
  24.                 regions.put(region, meteors);
  25.  
  26.             }
  27.  
  28.             regions.get(region).put(meteorType, regions.get(region).get(meteorType) + amount);
  29.  
  30.             if (regions.get(region).get("Green") >= 1000000) {
  31.                 regions.get(region).put("Red", regions.get(region).get("Red") + regions.get(region).get("Green") / 1000000);
  32.                 regions.get(region).put("Green", regions.get(region).get("Green") % 1000000);
  33.                 regions.get(region).put("Green", regions.get(region).get("Green") % 1000000);
  34.             }
  35.  
  36.             if (regions.get(region).get("Red") >= 1000000) {
  37.                 regions.get(region).put("Black", regions.get(region).get("Black") + regions.get(region).get("Red") / 1000000);
  38.                 regions.get(region).put("Red", regions.get(region).get("Red") % 1000000);
  39.             }
  40.  
  41.             input = reader.readLine().split(" -> ");
  42.         }
  43.  
  44.         regions.entrySet().stream()
  45.                 .sorted((r1, r2) -> {
  46.                     if (Long.compare(
  47.                             r2.getValue().entrySet().stream().filter(m -> m.getKey().equals("Black")).findFirst().get().getValue(),
  48.                             r1.getValue().entrySet().stream().filter(m -> m.getKey().equals("Black")).findFirst().get().getValue()) == 0) {
  49.                         if (Integer.compare(r1.getKey().length(), r2.getKey().length()) == 0) {
  50.                             return r1.getKey().compareTo(r2.getKey());
  51.                         }
  52.                         return ((Integer) r1.getKey().length()).compareTo(r2.getKey().length());
  53.                     }
  54.                     return Long.compare(
  55.                             r2.getValue().entrySet().stream().filter(m -> m.getKey().equals("Black")).findFirst().get().getValue(),
  56.                             r1.getValue().entrySet().stream().filter(m -> m.getKey().equals("Black")).findFirst().get().getValue());
  57.                 })
  58.                 .forEach(r -> {
  59.                     System.out.println(r.getKey());
  60.                     r.getValue().entrySet().stream()
  61.                             .sorted((m1, m2) -> {
  62.                                 if (Long.compare(m2.getValue(), m1.getValue()) == 0) {
  63.                                     return m1.getKey().compareTo(m2.getKey());
  64.                                 }
  65.                                 return Long.compare(m2.getValue(), m1.getValue());
  66.                             })
  67.                             .forEach(m -> {
  68.                                 System.out.println("-> " + m.getKey() + " : " + m.getValue());
  69.                             });
  70.                 });
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement