У меня есть список, представляющий год, который заполняется под списком для каждого дня года.Пытается создать алгоритм планирования
year = []
for i in range(0,52*7):
day = [i,0] #[day number, 0 = empty, 1 = something is planned]
year.append(day)
У меня также есть список переменных действий, созданных классом.
class Activities:
def __init__(self,name,weeks,weekends):
self.name = name
self.weeks = weeks
self.weekends = weekends
def __repr__(self):
return repr((self.name,self.weeks,self.weekends))
def activityMaker(activityList):
a= []
for i in range(0, len(activityList)):
a.append(Activities(activityList[i][0], activityList[i][1], activityList[i][2]))
a = sorted(a, key=lambda Activities: Activities.weeks)
activityList = a
return activityList
В качестве примера;
>>> activityList = [['Tennis', 3, 0], ['Baseball', 4, 0], ['Swimming', 2, 0]]
>>>activities= activityMaker(activityList)
Который возвращает 'деятельность', отсортированные по Activities.weeks:
>>>activities[0].name
activities[0].week
activities[0].weekend
>>> 'Swimming' # activity name
2 #"i want to do this activity once every x weeks
0 # 0 = no preferance, 1 = not in weekends
Теперь здесь моя дилемма. Я хочу создать алгоритм для заполнения года активностью с максимально возможным ритмом.
Мой текущий подход работает неправильно. Теперь я делаю следующее.
for y in range(0,len(year), int(7*activities[0].weeks)):
year[y][1] = activities[i].name
Теперь первое мероприятие планируется для каждого y. Если бы у меня было два занятия, которые я каждый планировал раз в неделю, я мог бы планировать первый на 0, 7, 14 и т. Д., А второй на 3, 10, 17 и т. Д.
Проблема с этим подходом проиллюстрирована, если действия [0] и действия [1] равны соответственно 2 и 3. Если я применяю предыдущий подход, действия [0] будут запланированы на 0, 14, 28 и т. Д. что прекрасно само по себе. Между 0-м и 14-м, 2-й актив будет идеально расположен на 7-й позиции, а в следующий раз будет 28-й. Однако 28-го мероприятия уже запланированы. Это означает, что нет ничего запланированного на две недели, а затем вдруг 2 мероприятия в день. Второе действие может быть перенесено на 27-е или 29-е, но это все равно означает, что теперь мероприятия запланированы на 0-й, 7-й, 14-й, 28-й, 29-й. Ака, еще 14 дней между 14-м и 28-м, а затем только 1 между 28 и 29-м.
В каком виде я могу убедиться, что все мероприятия запланированы с таким же средним временем между действиями?