Skip to content

Instantly share code, notes, and snippets.

@volgoweb
Created August 28, 2017 08:37
Show Gist options
  • Save volgoweb/c1ffbdb1caf154d62b8d4de748410579 to your computer and use it in GitHub Desktop.
Save volgoweb/c1ffbdb1caf154d62b8d4de748410579 to your computer and use it in GitHub Desktop.
from collections import OrderedDict
members = [
#{'name': 'member', 'skills': set('skill1', 'skill2', ...)}
{'name': 'Jan', 'skills': set(('PHP', 'HTML'))},
{'name': 'Bep', 'skills': set(('HTML', 'CSS'))},
{'name': 'Leo', 'skills': set(('CSS', 'PHP'))}
]
project = OrderedDict([
#'task': ['skill', nrhourswork]
('A', ['PHP', 2]),
('B', ['HTML',3]),
('C', ['CSS', 4]),
('D', ['PHP', 3]),
('E', ['HTML',2]),
('F', ['CSS', 4]),
])
hours_by_member = {}
for member_data in members:
member_name = member_data['name']
member_skills = member_data['skills']
for task, skill_and_hours in project.items():
skill = skill_and_hours[0]
hours = skill_and_hours[1]
if skill in member_skills:
if member_name not in hours_by_member:
hours_by_member[member_name] = []
hours_by_member[member_name].append(hours)
for member_name, hours_list in hours_by_member.items():
hours_list.sort(reverse=True)
hours_by_member = OrderedDict(hours_by_member)
summary = 0
while len(hours_by_member):
parallel_hours = [hours_list[0] for mname, hours_list in hours_by_member.items() if len(hours_list) > 0]
min_hours = min(parallel_hours)
for mname, hours_list in hours_by_member.items():
if hours_list[0] > min_hours:
hours_list[0] -= min_hours
else:
del hours_list[0]
if len(hours_list) == 0:
del hours_by_member[mname]
summary += min_hours
print('Summary time: %d hours' % summary)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment