Задачу решил, кода много конечно вышло, но вроде всё работает, отбирает правильно, но не проходит решение. Валидатор грузит долго и всё.
Что код делает, если вкратце:
1) в отдельный список выносим видео, у которых есть ещё оплаченные показы
2) В "множество множеств" формирую все возможные вариации видео.
3) По очереди удаляю наборы:
3.1) У которых суммарное время больше чем время заказа
3.2) У которых суммарная сумма показа меньше максимальной по всем оставшимся видео после п.3.1
3.3) Из оставшихся наборов удаляем наборы, в которых число видео больше минимального из всех наборов
4) Перевод из SET в LIST и его сортировка
5) revalidate() и вывод на экран
Тестировал на тех примерах что давали в задаче и
add(new Advertisement(someContent, "1", 500, 10, 5 * 60));
add(new Advertisement(someContent, "2", 700, 10, 7 * 60));
add(new Advertisement(someContent, "3", 500, 10, 5 * 60));
add(new Advertisement(someContent, "4", 1500, 10, 15 * 60));
add(new Advertisement(someContent, "5", 700, 10, 7 * 60));
add(new Advertisement(someContent, "6", 100, 10, 1 * 60));
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.kitchen.Cook;
import com.javarush.task.task27.task2712.kitchen.Dish;
import com.javarush.task.task27.task2712.kitchen.Order;
import com.javarush.task.task27.task2712.kitchen.Waiter;
import java.io.IOException;
public class Restaurant {
public static void main(String[] args) throws IOException {
Tablet tablet = new Tablet(1);
Cook cook = new Cook("Повар 1");
Waiter waiter = new Waiter();
cook.addObserver(waiter);
tablet.addObserver(cook);
tablet.createOrder();
tablet.createOrder();
tablet.createOrder();
tablet.createOrder();
}
}