Created
February 24, 2022 20:58
-
-
Save fatihkaan22/f7a841feaea204fb96b0f393a8e30c4d to your computer and use it in GitHub Desktop.
2022 Google Hash Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
f = open("a_an_example.in.txt", "r") | |
cont_count, project_count = map(int, f.readline().split()) | |
people = {} | |
skills = {} | |
for i in range(cont_count): | |
person, spec_count = f.readline().split() | |
spec_count = int(spec_count.replace("\n", "")) | |
people[person] = [] | |
for j in range(spec_count): | |
skill, level = f.readline().replace("\n", "").split() | |
people[person].append({skill: level}) | |
if skill not in skills.keys(): | |
skills[skill] = [] | |
skills[skill].append({'name': person, 'level': level}) | |
projects = [] | |
for i in range(project_count): | |
text = f.readline().replace("\n", "").split() | |
name = text[0] | |
day, score, before, roles = map( | |
int, text[1:]) | |
req = {} | |
for j in range(roles): | |
key, value = f.readline().replace("\n", "").split() | |
req[key] = value | |
projects.append({"name": name, "day": day, "score": score, | |
"before": before, "req": req}) | |
projects.sort(key=lambda x: x['before']) | |
approved_projects = [] | |
people_availability = {} | |
for person in people: | |
people_availability[person] = 0 # 0: available | |
for project in projects: | |
current_day = 0 | |
reqs = project['req'] | |
complete_flag = False | |
found_spec = [] | |
while (not complete_flag) and current_day < project['before']+project['score']: | |
complete_flag = False | |
found_spec = [] | |
for req in reqs: | |
min_level = reqs[req] | |
qpeople = skills[req] | |
filtered = filter( | |
lambda x: x['level'] >= min_level and people_availability[x['name']] <= current_day, qpeople) | |
filtered = list(filtered) | |
if len(filtered) == 0: | |
# people busy, try later | |
current_day += 1 | |
break | |
else: | |
filtered.sort(key=lambda x: x['level']) # get minimum required | |
found_spec.append(filtered[0]['name']) | |
if len(found_spec) == len(reqs): | |
# all specs found | |
complated_flag = True | |
approved_projects.append( | |
{"name": project['name'], "people": filtered}) | |
for person in found_spec: | |
people_availability[person] += project['day'] | |
print(approved_projects) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
w/ @umitaltintas