CodeYourFuture / CodeYourFuture/Module-Tools

Implement laptop allocation

未關閉
#179 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
🏝️ Priority Stretch 🐂 Size Medium 📅 Sprint 5 Module-Tools Optional Submit:PR
主要語言
Shell
星號
0
分支
109
PR 合併指標
30 天內沒有已合併 PR

描述

In the prep, there was an exercise around finding _possible_ laptops for a group of people.

Your exercise is to extend this to actually _allocate_ laptops to the people.

Given these class definitions:

```python
from dataclasses import dataclass
from enum import Enum
from typing import List

class OperatingSystem(Enum):
MACOS = "macOS"
ARCH = "Arch Linux"
UBUNTU = "Ubuntu"

@dataclass(frozen=True)
class Person:
name: str
age: int
# Sorted in order of preference, most preferred is first.
preferred_operating_system: List[OperatingSystem]

@dataclass(frozen=True)
class Laptop:
id: int
manufacturer: str
model: str
screen_size_in_inches: float
operating_system: OperatingSystem
```

Write a function with this signature:

```python
def allocate_laptops(people: List[Person], laptops: List[Laptop]) -> Dict[Person, Laptop]:
```

Every person should be allocated exactly one laptop.

If we define "sadness" as the number of places down in someone's ranking the operating system the ended up with (i.e. if your preferences were `[UBUNTU, ARCH, MACOS]` and you were allocated a MACOS machine your sadness would be 2), we want to minimise the total sadness of all people. If we allocate someone a laptop with an operating system _not_ in their preferred list, treat them as having a sadness of 100.

### Maximum time in hours

3

### How to submit

Submit a PR to this repo containing your function (and any supporting code).

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。