Skip to content

Instantly share code, notes, and snippets.

@fatihkaan22
Created February 24, 2022 20:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fatihkaan22/f7a841feaea204fb96b0f393a8e30c4d to your computer and use it in GitHub Desktop.
Save fatihkaan22/f7a841feaea204fb96b0f393a8e30c4d to your computer and use it in GitHub Desktop.
2022 Google Hash Code
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)
@fatihkaan22
Copy link
Author

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