Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.81 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.             convertToUpper(region,meteorType,regions);
  31.         }
  32.         for (Map.Entry<String, LinkedHashMap<String, Long>> entries : regions.entrySet()) {
  33.             String region = entries.getKey();
  34.             LinkedHashMap<String, Long> meteors = entries.getValue();
  35.             for (String meteor : meteors.keySet()) {
  36.                 convertToUpper(region,meteor,regions);
  37.             }
  38.         }
  39.         regions.entrySet().stream().sorted((reg1, reg2) -> {
  40.             return Integer.compare(reg1.getKey().length(), reg2.getKey().length());
  41.         }).sorted((reg1, reg2) -> {
  42.             return Long.compare(reg2.getValue().get("Black"), reg1.getValue().get("Black"));
  43.         }).forEach(reg -> {
  44.             System.out.println(reg.getKey());
  45.             reg.getValue().entrySet().stream().sorted((m1,m2)-> m1.getKey().compareTo(m2.getKey())).sorted((met1, met2) -> {
  46.                 return met2.getValue().compareTo(met1.getValue());
  47.             }).forEach(meteor -> {
  48.                 System.out.printf("-> %s : %d\n", meteor.getKey(), meteor.getValue());
  49.             });
  50.         });
  51.     }
  52.  
  53.     private static void convertToUpper(String region, String meteorType, TreeMap<String, LinkedHashMap<String, Long>> regions) {
  54.         Long currentMeteorCount = regions.get(region).get(meteorType);
  55.         String upperMeteor = meteorType.equals("Green") ? "Red" : "Black";
  56.         if (currentMeteorCount >= 1_000_000 && !meteorType.equals("Black")) {
  57.             regions.get(region).put(upperMeteor, regions.get(region).get(upperMeteor) +
  58.                     currentMeteorCount / 1_000_000);
  59.             regions.get(region).put(meteorType, currentMeteorCount % 1_000_000);
  60.         }
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement