03. Plant Discovery
Условие: https://judge.softuni.bg/Contests/Practice/Index/2518#2
Наясно съм, че кодът ми е доста оплетен, но може ли някой да го редактира или да сподели друго решение на задачата (по възможност да бъде на Java)?
package Exam_03;
import java.util.*;
public class PlantDiscovery_03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
Map<String, Integer> plantsRarity = new LinkedHashMap<>();
Map<String, List<Double>> plantsRating = new LinkedHashMap<>();
for (int i = 0; i < n; i++) {
String[] tokens = scanner.nextLine().split("<->");
String plant = tokens[0];
int rarity = Integer.parseInt(tokens[1]);
plantsRarity.putIfAbsent(plant, rarity);
plantsRating.putIfAbsent(plant, new ArrayList<>());
}
String input = scanner.nextLine();
while (!input.equals("Exhibition")) {
String[] tokens = input.split(":\\s+");
String command = tokens[0];
if (command.equals("Rate")) {
String[] secondTokens = tokens[1].split("\\s+-[\\s+]?");
String plant = secondTokens[0];
double rating = Double.parseDouble(secondTokens[1]);
plantsRating.put(plant, plantsRating.get(plant));
plantsRating.get(plant).add(rating);
} else if (command.equals("Update")) {
String[] secondTokens = tokens[1].split("\\s+-[\\s+]?");
String plant = secondTokens[0];
int newRarity = Integer.parseInt(secondTokens[1]);
plantsRarity.put(plant, newRarity);
} else if (command.equals("Reset")) {
String plant = tokens[1];
plantsRating.get(plant).clear();
} else {
System.out.println("error");
}
input = scanner.nextLine();
}
Map<String, double[]> resultMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : plantsRarity.entrySet()) {
String plant = entry.getKey();
double value = entry.getValue();
resultMap.put(plant, new double[2]);
resultMap.get(plant)[0] = value;
}
Map<String, Double> averageRatingsMap = new LinkedHashMap<>();
double average = 0;
for (Map.Entry<String, List<Double>> entry : plantsRating.entrySet()) {
String plant = entry.getKey();
List<Double> doubles = plantsRating.get(plant);
double sum = 0;
for (int g = 0; g < doubles.size(); g++) {
sum += doubles.get(g);
}
if (sum == 0) {
average = 0.0;
} else {
average = sum / doubles.size();
}
averageRatingsMap.putIfAbsent(plant, average);
}
for (Map.Entry<String, Double> entry : averageRatingsMap.entrySet()) {
String plant = entry.getKey();
double rating = entry.getValue();
resultMap.put(plant, resultMap.get(plant));
resultMap.get(plant)[1] = rating;
}
System.out.println("Plants for the exhibition:");
resultMap.entrySet()
.stream()
.sorted((left, right) -> {
if (right.getValue()[0] == left.getValue()[0]) {
return Double.compare(right.getValue()[1], left.getValue()[1]);
}
return Double.compare(right.getValue()[0], left.getValue()[0]);
})
.forEach(plant -> System.out.println(String.format("- %s; Rarity: %d; Rating: %.2f",
plant.getKey(), (int) plant.getValue()[0], plant.getValue()[1])));
}
}
Здравейте, кодът по4ти го преписах от "svephoto". Изходите излизат в InteliJ. но Judge дава само 50/100. - 4 Runtime errors.
Ако някой може да подскаже?
PlantDiscovery - Pastebin.com
Здравей VasilKos,
Единствента разлика е, че не проверяваш дали имаш такова растение в HashMap-a, което трябва да се смята като невалидна команда
If any given command is invalid, print "error"
https://pastebin.com/BnmScvxE
Благодаря.