Больше недели ежедневно мучаюсь с этой задачей.
Решил делать через решение "Задачи о рюкзаке" с применением рекурсии (полный перебор).
Сначала валидация не проходила с диагнозом "Задача работала слишком долго".
Эмпирическим путем выяснил, что 11 элементов перебираются моей программой примерно 5 сек, 12 элементов уже 62 секунды, 13 элементов без малого 14 минут. Дальше не считал.
После подправил немного, теперь показывает что по всем пунктам (кроме последнего) не проходит.
Тестировал кучу раз, разными наборами.
Хотелось бы не качать готовое решение, а довести до ума своё или понять, почему оно совсем не годится и лучше заново все написать.
О великие гуру, пожалуйста, укажите на места где я не прав.
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.ad.AdvertisementManager;
import com.javarush.task.task27.task2712.ad.NoVideoAvailableException;
import com.javarush.task.task27.task2712.kitchen.Order;
import java.io.IOException;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Tablet extends Observable {
static Logger logger = Logger.getLogger(Tablet.class.getName());
final int number;
public Tablet(int id) {
this.number = id;
}
public Order createOrder() {
Order order = null;
try {
order = new Order(this);
setChanged();
if (!order.isEmpty()) {
notifyObservers(order);
ConsoleHelper.writeMessage(order.toString());
new AdvertisementManager(order.getTotalCookingTime()*60).processVideos();
}
return order;
} catch (IOException e) {
logger.log(Level.SEVERE, "Console is unavailable.");
return null;
} catch (NoVideoAvailableException e) {
logger.log(Level.INFO, "No video is available for the order " + order);
return null;
}
}
@Override
public String toString() {
return "Tablet{number=" + number + "}";
}
}