Skip to content

Commit 01e59e9

Browse files
committed
Initiating data sets for person and laptops class for laptop allocation.
1 parent 407b010 commit 01e59e9

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

laptop Allocation/laptop.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from dataclasses import dataclass
2+
from enum import Enum
3+
from typing import Dict, List
4+
import sys
5+
6+
class OperatingSystem(Enum):
7+
MACOS = "macOS"
8+
ARCH = "Arch Linux"
9+
UBUNTU = "Ubuntu"
10+
11+
@dataclass(frozen=True)
12+
class Person:
13+
name: str
14+
age: int
15+
# Sorted in order of preference, most preferred is first.
16+
preferred_operating_systems: List[OperatingSystem]
17+
18+
19+
@dataclass(frozen=True)
20+
class Laptop:
21+
id: int
22+
manufacturer: str
23+
model: str
24+
screen_size_in_inches: float
25+
operating_system: OperatingSystem
26+
27+
#library of laptops
28+
laptop = [
29+
Laptop(id=1, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH),
30+
Laptop(id=2, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
31+
Laptop(id=3, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU),
32+
Laptop(id=4, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
33+
Laptop(id=5, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
34+
Laptop(id=6, manufacturer="Dell", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH),
35+
Laptop(id=7, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
36+
Laptop(id=8, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS),
37+
]
38+
# Preset dataset of people
39+
people = [
40+
Person(name="Sara", age=31, preferred_operating_system=[OperatingSystem.ARCH,OperatingSystem.UBUNTU]),
41+
Person(name="Shabs", age=40, preferred_operating_system=[OperatingSystem.ARCH,OperatingSystem.MACOS,OperatingSystem.UBUNTU]),
42+
Person(name="Jawad", age= 36, preferred_operating_system=[OperatingSystem.MACOS,OperatingSystem.UBUNTU,OperatingSystem.ARCH]),
43+
Person(name="Mike", age=35, preferred_operating_system=[OperatingSystem.MACOS,OperatingSystem.ARCH]),
44+
Person(name="Mawra", age=28, preferred_operating_system=[OperatingSystem.MACOS]),
45+
Person(name="Fatma", age= 22, preferred_operating_system=[OperatingSystem.UBUNTU,OperatingSystem.ARCH]),
46+
Person(name="Muhib", age= 19, preferred_operating_system=[OperatingSystem.MACOS,OperatingSystem.UBUNTU]),
47+
48+
]
49+
50+
def sadness(person: Person, laptop: Laptop) -> int:
51+
if laptop.operating_system == person.preferred_operating_systems[0]:
52+
return 0
53+
elif len(person.preferred_operating_systems) > 1 and laptop.operating_system == person.preferred_operating_systems[1]:
54+
return 1
55+
elif len(person.preferred_operating_systems) > 2 and laptop.operating_system == person.preferred_operating_systems[2]:
56+
return 2
57+
else:
58+
return 100
59+
60+
#There are two approaches to solve this
61+
#Greedy approach or Hungarian Algorithm Approach
62+
63+
#def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> Dict[Person, Laptop]:

0 commit comments

Comments
 (0)