Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Алгоритмы #46

Description

@alex-ac

Написать алгоритмы, для следующих задач:

  • Установка времени события так, чтобы оно не конфликтовало с другими событиями людей, участвующих в нем.
  • Отбор людей для регулярно повторяющегося события.

Вводятся дополнительные сущности в алгоритмах:

traits - ограничения событий по времени.

traits ::= traits_list "\" traits_list
traits_list ::= {trait}
trait ::= "("datetime"|"datetime")"
datetime ::= year"-"month"-"day" "hour":"min":"sec

до "" - интервалы времени, в которые событие может проходить, после - интервалы, в которых событие проходить не может.

В итоге событие располагается на множестве:

U ⋂ ( A_1 ∪ A_2 ∪ ... ∪ A_i) \ D_1 \ D_2 \ ... \ D_j

A_1 ... A_i - интервалы до "", D_1 ... D_j - интервалы после "".

В lua представляется таблицей

traits = {
 ["allow"] = {
  {["from"] = timestamp, ["to"] = timestamp},
  {["from"] = timestamp, ["to"] = timestamp}
 },
 ["deny"] = {
  {["from"] = timestamp, ["to"] = timestamp},
  {["from"] = timestamp, ["to"] = timestamp}
 }
}

Функции:

algorithms.parse_traits(traits) -- перевести из строки в таблицу
algorithms.make_traits(traits) -- обратное преобразование
algorithms.optimize_traits(traits) -- оптимизовать интервалы
         -- (убрать пересечения, по возможности избавиться от deny ограничений)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions