Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.xml.crypto.dsig.keyinfo.KeyValue;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.zip.DeflaterOutputStream;
- public class Agents {
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- LinkedHashMap<String, HashMap<String, Double>> agentsAndMissionsStart = new LinkedHashMap<>();
- HashMap<String, Double> missions = new HashMap<>();
- String[] tokens = scan.nextLine().split(":");
- while (!tokens[0].equals("registration")) {
- if (tokens.length == 1) {
- String agent = tokens[0];
- agentsAndMissionsStart.put(agent, new HashMap<>());
- } else {
- String mission = tokens[0];
- double rating = Double.parseDouble(tokens[1]);
- missions.put(mission, rating);
- }
- tokens = scan.nextLine().split(":");
- }
- //1st phase completed
- //assignments start here:
- LinkedHashMap<String, HashMap<String, Double>> agentsAndMissions = new LinkedHashMap<>();
- tokens = scan.nextLine().split("->");
- while (!tokens[0].equals("operate")) {
- String command = tokens[0];
- if (command.equals("assign")) {
- String agent = tokens[1];
- String mission = tokens[2];
- if (missions.containsKey(mission)
- && !agentsAndMissionsStart.get(agent).containsKey(mission)) {
- double rating = missions.get(mission);
- agentsAndMissions.putIfAbsent(agent, new HashMap<>());
- agentsAndMissions.get(agent).put(mission, rating);
- }
- } else if (command.equals("abort")) {
- String mission = tokens[1];
- for (String agent : agentsAndMissions.keySet()) {
- if (agentsAndMissions.get(agent).containsKey(mission)) {
- agentsAndMissions.get(agent).remove(mission);
- }
- }
- } else if (command.equals("change")) {
- String agent_1 = tokens[1];
- String agent_2 = tokens[2];
- HashMap<String, Double> agentMissions = agentsAndMissions.get(agent_1);
- agentsAndMissions.put(agent_1, agentsAndMissions.get(agent_2));
- agentsAndMissions.put(agent_2, agentMissions);
- }
- tokens = scan.nextLine().split("->");
- }
- //assignments completed
- List<String> freeAgents = agentsAndMissions.keySet().stream()
- .filter(x -> agentsAndMissions.get(x).size() == 0)
- .collect(Collectors.toCollection(ArrayList::new));
- for (String freeAgent : freeAgents) {
- agentsAndMissions.remove(freeAgent);
- }
- //print result:
- LinkedHashMap<String, Double> agentsPerRatingIni = new LinkedHashMap<>();
- for (String agent : agentsAndMissions.keySet()) {
- double totalRating = 0;
- for (String mission : agentsAndMissions.get(agent).keySet()) {
- totalRating += agentsAndMissions.get(agent).get(mission);
- }
- agentsPerRatingIni.put(agent, totalRating);
- }
- List<String> agentsPerRating = new ArrayList<>();
- agentsPerRating = agentsPerRatingIni.keySet().stream()
- .sorted((b, a) -> Double.compare(agentsPerRatingIni.get(a), agentsPerRatingIni.get(b)))
- .collect(Collectors.toList());
- for (String agent : agentsPerRating) {
- System.out.printf("Agent: %s - Total Rating: %.2f%n",
- agent, agentsPerRatingIni.get(agent));
- agentsAndMissions.get(agent).entrySet().stream()
- .sorted((b, a) -> Double.compare(a.getValue(), b.getValue()))
- .forEach(mission -> System.out.printf("- %s -> %.2f%n"
- , mission.getKey(), mission.getValue()));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement