Skip to content

Commit 08c30f9

Browse files
committed
done allocation
1 parent abe33a9 commit 08c30f9

1 file changed

Lines changed: 44 additions & 4 deletions

File tree

laptop_alloctaion.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ class Person:
1616
# Sorted in order of preference, most preferred is first.
1717
preferred_operating_system: List[OperatingSystem]
1818

19+
def __hash__(self):
20+
return hash((self.name, self.age, tuple(self.preferred_operating_system)))
21+
1922

2023
@dataclass(frozen=True)
2124
class Laptop:
@@ -56,18 +59,55 @@ class Laptop:
5659
operating_system=OperatingSystem.MACOS,
5760
),
5861
]
62+
users = [
63+
Person(
64+
name="Andrei",
65+
age=20,
66+
preferred_operating_system=[OperatingSystem.MACOS, OperatingSystem.UBUNTU],
67+
),
68+
Person(
69+
name="Eyuel",
70+
age=20,
71+
preferred_operating_system=[
72+
OperatingSystem.MACOS,
73+
OperatingSystem.UBUNTU,
74+
OperatingSystem.ARCH,
75+
],
76+
),
77+
Person(
78+
name="Priscilla",
79+
age=30,
80+
preferred_operating_system=[OperatingSystem.ARCH, OperatingSystem.UBUNTU],
81+
),
82+
Person(
83+
name="Miki",
84+
age=21,
85+
preferred_operating_system=[OperatingSystem.MACOS, OperatingSystem.UBUNTU],
86+
),
87+
]
88+
89+
sadness = 0
5990

6091

6192
def allocate_laptops(
6293
people: List[Person], laptops: List[Laptop]
6394
) -> dict[Person, Laptop]:
6495
allocation = {}
96+
global sadness
6597
laptops_copy = laptops.copy()
6698
for person in people:
67-
for laptop in laptops_copy:
68-
for index in range(len(person.preferred_operating_system)):
69-
if laptop.operating_system == person.preferred_operating_system:
99+
for index in range(len(person.preferred_operating_system)):
100+
if person in allocation:
101+
break
102+
for laptop in laptops_copy:
103+
if laptop.operating_system == person.preferred_operating_system[index]:
70104
allocation[person] = laptop
71-
# elif
105+
laptops_copy.remove(laptop)
106+
sadness += index
107+
break
108+
elif laptop.operating_system != person.preferred_operating_system[
109+
index
110+
] and index + 1 == len(person.preferred_operating_system):
111+
sadness += 100
72112

73113
return allocation

0 commit comments

Comments
 (0)