Java Advanced 5. Robotics
Условие:
https://softuni.bg/trainings/resources/officedocument/59899/exercise-java-advanced-may-2021/3345
Дава ми 10/100, като и 2та тестови примера са ми верни. И не знам къде ми е грешката.
Като направих дебъг, използвайки създаден от мен дълъг пример програмата ми работи точно както трябва.
Ето ми го кода:
public class Robotics { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayDeque<String> queue = new ArrayDeque<>(); String[] data = scan.nextLine().split(";"); Map<String, Integer> robots = new LinkedHashMap<>(); //има константни имена и секунди на робота Map<String, Boolean> freeRobots = new HashMap<>(); //показва вярно ако не е зает и грешно ако е зает Map<String, Integer> cooldown = new HashMap<>(); //даден е инт, който се намаля всеки път с 1 String[] robotData = new String[2]; for (int i = 0; i < data.length; i++) { //давам стойности на всичко robotData[0] = data[i].split("-")[0]; robotData[1] = data[i].split("-")[1]; robots.put(robotData[0], Integer.parseInt(robotData[1])); freeRobots.put(robotData[0], true); cooldown.put(robotData[0], 0); } String[] time = scan.nextLine().split(":"); int hours = Integer.parseInt(time[0]); int minutes = Integer.parseInt(time[1]); int seconds = Integer.parseInt(time[2]); String material = scan.nextLine(); while (!material.equals("End")) { //въвеждам продукти queue.offer(material); material = scan.nextLine(); } while (queue.size() > 0) { seconds++; if (seconds == 60) { seconds = 0; minutes++; if (minutes == 60) { hours++; minutes = 0; } } for (Map.Entry<String, Integer> entry : robots.entrySet()) { //проверява заетите роботи и им намаля //времето с 1, като костантата от robots не е променена if (freeRobots.get(entry.getKey()) == false) { cooldown.put(entry.getKey(), cooldown.get(entry.getKey()) - 1); if (cooldown.get(entry.getKey()) == 0) { //ако времето е 0 го правя свободен freeRobots.put(entry.getKey(), true); } } } boolean anyone = false; //проверява дали има робот, който е взел продукт for (Map.Entry<String, Integer> entry : robots.entrySet()) { //дава на незаетите роботи задача if (freeRobots.get(entry.getKey()) == true) { freeRobots.put(entry.getKey(), false); cooldown.put(entry.getKey(), entry.getValue()); System.out.print(entry.getKey() + " - " + queue.poll() + " ["); //извеждане и махане на най-горния //елемент от опашката if (hours < 10) { System.out.print("0"); } System.out.print(hours + ":"); if (minutes < 10) { System.out.print("0"); } System.out.print(minutes + ":"); if (seconds < 10) { System.out.print("0"); } System.out.println(seconds + "]"); anyone = true break; } } if (anyone == false) { //ако няма, мести продукта най-отзаде queue.offer(queue.poll()); } } } }
Мерси, аз не си мислех че има нужда изобщо да правя тази проверка. Виждам, че едната ми грешка ми е че излиза от рамките за време, за това ще потърся къде вероятно може да зацикли. Но и аз след като дебъгвах тази задача със състезателна трудност за половин час не открих да има проблем.