KNikov

Assault

Jun 20th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.63 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.Map;
  7. import java.util.TreeMap;
  8.  
  9. public class Problem4 {
  10.     public static void main(String[] args) throws IOException {
  11.         BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  12.  
  13.         String line;
  14.         TreeMap<String, TreeMap<String, Long>> regions = new TreeMap<>();
  15.         while (!(line = bf.readLine()).equals("Count em all")) {
  16.             String[] input = line.split(" -> ");
  17.             String region = input[0];
  18.             String meteorType = input[1];
  19.             Long count = Long.parseLong(input[2]);
  20.  
  21.             if (!regions.containsKey(region)) {
  22.                 TreeMap<String, Long> innerMap = new TreeMap<>();
  23.                 innerMap.put("Red", 0L);
  24.                 innerMap.put("Black", 0L);
  25.                 innerMap.put("Green", 0L);
  26.                 regions.put(region, innerMap);
  27.             }
  28.             regions.get(region).put(meteorType, regions.get(region).get(meteorType) + count);
  29.         }
  30.         for (Map.Entry<String, TreeMap<String, Long>> entries : regions.entrySet()) {
  31.             String region = entries.getKey();
  32.             TreeMap<String, Long> meteors = entries.getValue();
  33.             for (String meteor : meteors.keySet()) {
  34.                 convertToUpper(region,meteor,regions);
  35.             }
  36.         }
  37.         regions.entrySet().stream().sorted((m1, m2) -> {
  38.             return Integer.compare(m1.getKey().length(), m2.getKey().length());
  39.         }).sorted((m1, m2) -> {
  40.             return Long.compare(m2.getValue().get("Black"), m1.getValue().get("Black"));
  41.         }).forEach(m1 -> {
  42.             System.out.println(m1.getKey());
  43.             m1.getValue().entrySet().stream().sorted((c1, c2) -> {
  44.                 return c2.getValue().compareTo(c1.getValue());
  45.             }).forEach(a -> {
  46.                 System.out.printf("-> %s : %d\n", a.getKey(), a.getValue());
  47.             });
  48.         });
  49.     }
  50.  
  51.     private static void convertToUpper(String region, String meteorType, TreeMap<String, TreeMap<String, Long>> regions) {
  52.         Long currentMeteorCount = regions.get(region).get(meteorType);
  53.         String upperMeteor = meteorType.equals("Green") ? "Red" : "Black";
  54.         if (currentMeteorCount >= 1_000_000 && !meteorType.equals("Black")) {
  55.             regions.get(region).put(upperMeteor, regions.get(region).get(upperMeteor) +
  56.                     regions.get(region).get(meteorType) / 1_000_000);
  57.             regions.get(region).put(meteorType, regions.get(region).get(meteorType) % 1_000_000);
  58.         }
  59.     }
  60. }
Add Comment
Please, Sign In to add comment