kalinikov

04. Hornet Armada - 60/100

Dec 4th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. public class HornetArmada {
  8. public static void main(String[] args) {
  9. Scanner scanner = new Scanner(System.in);
  10.  
  11. int n = Integer.parseInt(scanner.nextLine());
  12.  
  13. Map<String, Integer> nameActivity = new LinkedHashMap<>();
  14. Map<String, Map<String, Long>> nameTypeCount = new LinkedHashMap<>();
  15.  
  16. for (int i = 0; i < n; i++) {
  17. String info = scanner.nextLine();
  18.  
  19. String regex = "^(?<activity>\\d+) = (?<name>[^=->: ]+) -> (?<type>[^=->: ]+):(?<count>\\d+)$";
  20. Pattern pattern = Pattern.compile(regex);
  21. Matcher matcher = pattern.matcher(info);
  22.  
  23. if (matcher.find()) {
  24. int activity = Integer.parseInt(info.split(" = ")[0]);
  25. String name = matcher.group("name");
  26. String type = matcher.group("type");
  27. long count = Long.parseLong(info.split(":")[1]);
  28.  
  29. if (!nameActivity.containsKey(name)) {
  30. nameActivity.put(name, activity);
  31. nameTypeCount.put(name, new LinkedHashMap<>());
  32. nameTypeCount.get(name).put(type, count);
  33. } else {
  34. if (activity > nameActivity.get(name)) {
  35. nameActivity.put(name, activity);
  36. }
  37. if (!nameTypeCount.get(name).containsKey(type)) {
  38. nameTypeCount.get(name).put(type, count);
  39. } else {
  40. nameTypeCount.get(name).put(type, count + nameTypeCount.get(name).get(type));
  41. }
  42. }
  43. }
  44. }
  45.  
  46. String line = scanner.nextLine();
  47.  
  48. if (line.contains("\\")) {
  49. int activity = Integer.parseInt(line.split("\\\\")[0]);
  50. String soldierType = line.split("\\\\")[1];
  51.  
  52. if (!nameTypeCount.isEmpty()) {
  53. nameTypeCount.entrySet()
  54. .stream()
  55. .filter(e -> {
  56. return nameActivity.get(e.getKey()) < activity;
  57. })
  58. .sorted((f, s) -> {
  59. return (int) (s.getValue().get(soldierType) - f.getValue().get(soldierType));
  60. })
  61. .forEach(e -> {
  62. System.out.printf("%s -> %d%n", e.getKey(), e.getValue().get(soldierType));
  63. });
  64. }
  65.  
  66. } else {
  67. String soldierType = line;
  68.  
  69. if (!nameActivity.isEmpty()) {
  70. nameActivity.entrySet()
  71. .stream()
  72. .filter(e -> {
  73. return nameTypeCount.get(e.getKey()).containsKey(soldierType);
  74. })
  75. .sorted((f, s) -> {
  76. return s.getValue() - f.getValue();
  77. })
  78. .forEach(e -> {
  79. System.out.printf("%d : %s%n", e.getValue(), e.getKey());
  80. });
  81. }
  82. }
  83.  
  84. }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment