46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
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}")
|