feat: add random plane schedule in task 6
This commit is contained in:
45
task6/main.py
Normal file
45
task6/main.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
from collections import deque
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from icecream import ic
|
||||||
|
from numpy import random
|
||||||
|
from typing import Final, Iterable
|
||||||
|
|
||||||
|
from numpy.typing import NDArray
|
||||||
|
|
||||||
|
|
||||||
|
class Plane:
|
||||||
|
__id_increment = 0
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.id = self.__id_increment
|
||||||
|
Plane.__id_increment += 1
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Request:
|
||||||
|
time: float
|
||||||
|
plane: Plane
|
||||||
|
|
||||||
|
def generate_timeline(incoming_planes_per_hour: float, outcoming_planes_per_hour: float, interval_minutes: int) -> Iterable[tuple[int, int]]:
|
||||||
|
def _generate(planes_per_hour: float) -> NDArray:
|
||||||
|
return random.poisson(planes_per_hour / 60, interval_minutes)
|
||||||
|
|
||||||
|
incoming_planes_per_minute = _generate(incoming_planes_per_hour)
|
||||||
|
outcoming_planes_per_minute = _generate(outcoming_planes_per_hour)
|
||||||
|
return zip(incoming_planes_per_minute, outcoming_planes_per_minute)
|
||||||
|
|
||||||
|
# takeoff_duration: Final[float] = 30 # minutes
|
||||||
|
|
||||||
|
# max_queue: Final[int] = int(input())
|
||||||
|
# interval: Final[float] = int(input()) # minutes
|
||||||
|
# incoming_planes, outcoming_planes = map(float, input().split()) # per hour
|
||||||
|
|
||||||
|
# in_queue: deque[Plane] = deque(maxlen=max_queue)
|
||||||
|
# out_queue: deque[Plane] = deque(maxlen=max_queue)
|
||||||
|
|
||||||
|
timeline = generate_timeline(5,2, 120)
|
||||||
|
|
||||||
|
for i, (in_planes_count, out_planes_count) in enumerate(timeline):
|
||||||
|
for a in range(in_planes_count):
|
||||||
|
ic(f"{i} in: {Plane().id}")
|
||||||
|
for a in range(out_planes_count):
|
||||||
|
ic(f"{i} out: {Plane().id}")
|
||||||
Reference in New Issue
Block a user