From 5efefcd79563b6bc2d901a2dcb98ecabb833b99a Mon Sep 17 00:00:00 2001 From: Aida Eslami Date: Fri, 12 Dec 2025 12:37:13 +0000 Subject: [PATCH 1/3] Implement laptop allocation --- laptop/myLaptop | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 laptop/myLaptop diff --git a/laptop/myLaptop b/laptop/myLaptop new file mode 100644 index 00000000..952f0dc6 --- /dev/null +++ b/laptop/myLaptop @@ -0,0 +1,67 @@ +from dataclasses import dataclass +from enum import Enum +from typing import List + +class OperatingSystem(Enum): + MACOS = "macOS" + ARCH = "Arch Linux" + UBUNTU = "Ubuntu" + WINDOWS = "Windows" + +@dataclass(frozen=True) +class Person: + name: str + age: int + preferred_operating_system: List[OperatingSystem] + +@dataclass(frozen=True) +class Laptop: + id: int + manufacturer: str + model: str + screen_size_in_inches: float + operating_system: OperatingSystem + +def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> dict[Person, Laptop]: + allocateLp = {} + lpNewList = laptops.copy() + + if len(laptops) < len(people): + print("Not enough laptops for all people") + + for person in people: + sadnessNumber = 100 + + for lp in lpNewList: + if lp.operating_system in person.preferred_operating_system: + sadnessNumber = person.preferred_operating_system.index(lp.operating_system) + allocateLp[person.name] = (lp.operating_system.value, sadnessNumber) + lpNewList.remove(lp) + break + if sadnessNumber == 100: + allocateLp[person.name] = ("No Laptop Assigned", sadnessNumber) + + return allocateLp + + +personList = [ + Person(name="Aida", age=30, preferred_operating_system=[OperatingSystem.UBUNTU]), + Person(name="Elizaveta", age=28, preferred_operating_system=[OperatingSystem.UBUNTU, OperatingSystem.WINDOWS, OperatingSystem.ARCH]), + Person(name="Zahra", age=35, preferred_operating_system=[OperatingSystem.UBUNTU]), + Person(name="Tobi", age=35, preferred_operating_system=[OperatingSystem.WINDOWS, OperatingSystem.MACOS, OperatingSystem.ARCH]), +] + +laptopList = [ + Laptop(id=1, manufacturer="Dell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH), + Laptop(id=4, manufacturer="EDell", model="XPS", screen_size_in_inches=13, operating_system=OperatingSystem.ARCH), + Laptop(id=2, manufacturer="Dell", model="XPS", screen_size_in_inches=15, operating_system=OperatingSystem.UBUNTU), + Laptop(id=3, manufacturer="Apple", model="macBook", screen_size_in_inches=13, operating_system=OperatingSystem.MACOS), +] + +result = allocate_laptops(personList, laptopList) +lenResult = len(result) +for key, value in result.items(): + print (f" {key } has ** {value[0]} ** and Sadness is: {value[1]}" ) + + + From fbcbc5c7375dd016b0c3de1e093d514adb67557b Mon Sep 17 00:00:00 2001 From: Aida Eslami Date: Mon, 9 Feb 2026 16:39:20 +0000 Subject: [PATCH 2/3] Fixed return type --- laptop/{myLaptop => myLaptop.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename laptop/{myLaptop => myLaptop.py} (98%) diff --git a/laptop/myLaptop b/laptop/myLaptop.py similarity index 98% rename from laptop/myLaptop rename to laptop/myLaptop.py index 952f0dc6..74f4b4cb 100644 --- a/laptop/myLaptop +++ b/laptop/myLaptop.py @@ -22,7 +22,7 @@ class Laptop: screen_size_in_inches: float operating_system: OperatingSystem -def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> dict[Person, Laptop]: +def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> dict[str, tuple[str, int]]: allocateLp = {} lpNewList = laptops.copy() From cc0cd9cad858a7a95fffbdd678ff78e1d72757b7 Mon Sep 17 00:00:00 2001 From: Aida Eslami Date: Mon, 9 Feb 2026 18:59:04 +0000 Subject: [PATCH 3/3] Fixed return type --- laptop/myLaptop | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/laptop/myLaptop b/laptop/myLaptop index 952f0dc6..59837e41 100644 --- a/laptop/myLaptop +++ b/laptop/myLaptop @@ -22,7 +22,10 @@ class Laptop: screen_size_in_inches: float operating_system: OperatingSystem -def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> dict[Person, Laptop]: +def allocate_laptops( + people: List[Person], + laptops: List[Laptop] +) -> dict[str, tuple[str, int]]: allocateLp = {} lpNewList = laptops.copy()