Пожалуйста, ознакомьтесь со списком призов, правилами оформления результатов и прочими условиями конкурса.

С момента первоначальной публикации были внесены следующие изменения:

  1. Явно указано, какие поля в описании задачи являются обязательными

Задача 2: составление плана-графика

Код задачи: gantt.

Краткое описание: Построение расписания и генерация диаграммы Гантта на основе электронной таблицы со списком работ.

Развернутое описание

Дана электронная таблица, в которой содержится информация о списке работ. Программа должна проверить имеющуюся информацию на непротиворечивость и заполнить недостающие графы: расставить исполнителей, назначить даты начала и окончания работ и так далее.

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

Формат файла

Пример электронной таблицы с исходными данными можно найти в файле source.csv.

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

В таблице может быть несколько блоков с одинаковыми именами, в таком случае их содержимое объединяется.

Все прочие строки можно игнорировать.

Формат блоков

Блок «маркер формата»: обозначается ключевым словом Plan Format. Состоит из одной строки: в колонке B указан номер версии формата файла: 1.0.

Блок «даты»: обозначается ключевым словом Dates. Состоит из одной строки. В колонке B указана дата начала проекта, в колонке C — ориентировочная дата окончания проекта, в колонке D — дата последней модификации данных, которая при планировании задач трактуется как «текущая дата». Далее эта дата будет обозначаться как «время T».

Блок «задачи»: обозначается ключевым словом Tasks. Состоит из нескольких строк, в которых колонки имеют следующий смысл:

Блок «ресурсы»: обозначается ключевым словом Resources. Состоит из нескольких строк, в каждой из которых в колонке A указан идентификатор ресурса или исполнителя. В рамках задачи считается, что «ресурс» — это станок, человек или робот, способный выполнять любую задачу в течение 8 часов в день, 5 дней в неделю, то есть все ресурсы взаимозаменяемы.

Блок «ограничения»: обозначается ключевым словом Constraints. Состоит из нескольких строк, в каждой из которых в колонке A находится формула, задающая определенные ограничения на изменения сведений о задачах. Допустимы такие формулы:

Планирование

Процесс планирования заключается в том, чтобы по исходному файлу с данными построить выходной файл в том же формате так, чтобы для всех задач были проставлены исполнители, даты начала и окончания работы, были соблюдены все ограничения, и все работы были завершены до даты окончания проекта. В качестве примера результата работы смотрите файл output.csv.

В ходе планирования можно выполнять такие преобразования задач:

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

Не разрешается назначение времени начала исполнения задачи раньше текущей даты (времени T). Не разрешается изменение времени начала исполнения, если оно находится «в прошлом» (ранее времени T). Если дата начала и окончания исполнения задачи находится в прошлом, то такую задачу вообще нельзя изменять.

Не разрешается использовать любой ресурс более чем 8 часов в день.

Уточненные оценки трудоемкости задачи, если он есть, должны использоваться вместо первоначальной оценки трудоемкости задачи. Пример использования уточненных оценок см. в файле corrected.csv.

Указанные пользователем даты и исполнители при отсутствии ограничений fixr, fixt и fixrt считаются «пожеланиями» и могут быть свободно изменены программой при планировании.

Полученный план работ должен иметь как можно более короткую суммарную длительность (время от начала исполнения самой ранней задачи до времени завершения самой поздней).

Уровень 1: программа способна составить план работ без учета ограничений.

Уровень 2: программа способна составить план работ с учетом ограничений.

Уровень 3: программа, дополнительно, способна считывать исходные данные из файлов формата XLS и/или ODS и записывать результат в файлы такого формата. Программа способна обрабатывать электронные таблицы, находящиеся на сервере Google Docs, обновляя данные в них или создавая там новые документы.

Уровень 4: Программа сохраняет в отдельный файл графическое изображение план-графика в виде диаграммы Гантта и, по желанию пользователя, может генерировать план, нагружающий ресурсы по возможности в одинаковой степени.