KNikov

Assault

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