Yargi

PlantDiscovery

Aug 9th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.54 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. public class PlantDiscovery {
  5.     public static void main(String[] args) {
  6.         Scanner sc = new Scanner(System.in);
  7.  
  8.         int n = Integer.parseInt(sc.nextLine());
  9.  
  10.         Map<String, Plant> plants = new LinkedHashMap<>();
  11.  
  12.         for (int i = 0; i < n; i++){
  13.  
  14.             String[] nextPlant = sc.nextLine().split("<->");
  15.  
  16.             String name = nextPlant[0];
  17.             int rarity = Integer.parseInt(nextPlant[1]);
  18.  
  19.             if (plants.containsKey(name)){
  20.                 plants.get(name).setRarity(rarity);
  21.             }
  22.             else {
  23.                 plants.put(name, new Plant(name, rarity));
  24.             }
  25.         }
  26.  
  27.         String input;
  28.         while (!"Exhibition".equals(input = sc.nextLine())){
  29.  
  30.             String[] com = input.split(": ");
  31.             String[] token = com[1].split(" - ");
  32.  
  33.             String command = com[0];
  34.             String name = token[0];
  35.             Double rating = 0.0;
  36.             int rarity = 0;
  37.  
  38.             switch (command){
  39.  
  40.                 case "Rate":
  41.                     if (plants.containsKey(name) && token.length == 2){
  42.                         rating = Double.parseDouble(token[1]);
  43.                         plants.get(name).addRating(rating);
  44.                     }
  45.                     else {
  46.                         System.out.println("error");;
  47.                     }
  48.                     break;
  49.  
  50.                 case "Update":
  51.                     if (plants.containsKey(name) && token.length == 2){
  52.                         rarity = Integer.parseInt(token[1]);
  53.                         plants.get(name).setRarity(rarity);
  54.                     }
  55.                     else {
  56.                         System.out.println("error");;
  57.                     }
  58.                     break;
  59.  
  60.                 case "Reset":
  61.                     if (plants.containsKey(name)){
  62.                         plants.get(name).clearRatings();
  63.                     }
  64.                     else {
  65.                         System.out.println("error");;
  66.                     }
  67.                     break;
  68.  
  69.                 default:
  70.                     System.out.println("error");
  71.                     break;
  72.             }
  73.         }
  74.         System.out.println("Plants for the exhibition:");
  75.         plants.values().stream()
  76.                 .sorted(Comparator.comparing(Plant::getAverageRating).reversed())
  77.                 .sorted(Comparator.comparing(Plant::getRarity).reversed())
  78.                 .forEach(plant -> {
  79.                     System.out.printf("- %s; Rarity: %d; Rating: %.2f%n", plant.getName(), plant.getRarity(), plant.getAverageRating());
  80.                 });
  81.     }
  82.  
  83.     static class Plant{
  84.  
  85.         private String name;
  86.         private int rarity;
  87.         private List<Double> ratings;
  88.  
  89.         public Plant(String name, int rarity){
  90.  
  91.             this.name = name;
  92.             this.rarity = rarity;
  93.             this.ratings = new ArrayList<>();
  94.         }
  95.  
  96.         public String getName() {
  97.             return name;
  98.         }
  99.  
  100.         public int getRarity() {
  101.             return rarity;
  102.         }
  103.  
  104.         public Double getAverageRating(){
  105.             return ratings.stream().collect(Collectors.averagingDouble(Double::doubleValue));
  106.         }
  107.  
  108.         public void setRarity(int rarity){
  109.             this.rarity = rarity;
  110.         }
  111.  
  112.         public void addRating(Double rating){
  113.             ratings.add(rating);
  114.         }
  115.  
  116.         public void clearRatings(){
  117.             ratings.clear();
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment