ADevil000 / JB-Interships-Find-in-Path-Go-to-File

Репозиторий для тестового задания от JB "Find in Path"

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JB-Interships-Find-in-Path-Go-to-File

Репозиторий для тестового задания от JB "Find in Path"

Требуется реализовать простой планировщик задач. На вход данному планировщику передается набор задач, которые он должен выполнить.

Задача может обладать зависимостями, то есть набором задач, которые требуется выполнить до выполнения данной.

Задача представляется интерфейсом:

interface Task {
   // выполняет задачу
   void execute();

    // возвращает зависимости для данной задачи
   Collection<Task> dependencies();
}

Требуется написать исходный код класса, реализуещего планировщик:

class TaskExecutor {
    void execute(Collection<Task> tasks) {
       // реализация
    }
}

Вы можете делать дополнительные предположения, которые вам кажутся необходимыми. Большим плюсом будет, если планировщик будет многопоточным. Данный планировщик должен быть устойчив к некорректным входным данным.

Класс Main содержит простой пример с реализацией EasyTask.

Решение основано на том, что корректным графом для решения зависисмостей будет ациклический. Из данного списка задач, строится полный граф зависимостей, в который будут добавлены даже те задачи, которые в изначальном списке не указаны. Строится аналогия к топологической сортировке. В плане сначала лежат те задачи, которые должны быть выполнены раньше.

About

Репозиторий для тестового задания от JB "Find in Path"


Languages

Language:Java 100.0%