From 60a489cfb3fb7a12a06212c2c7ed3c05cd0757b5 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Fri, 25 Oct 2024 18:03:18 +0200 Subject: Moved the files into a folder structure --- src/match_up/utilities.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/match_up/utilities.py (limited to 'src/match_up/utilities.py') diff --git a/src/match_up/utilities.py b/src/match_up/utilities.py new file mode 100644 index 0000000..7a9d55d --- /dev/null +++ b/src/match_up/utilities.py @@ -0,0 +1,58 @@ +from os import getenv +from time import time +from typing import Tuple +from random import shuffle +from dataclasses import dataclass + +SECS_IN_MIN = 60 + + +def _shuffle_two_lists(a: list, b: list) -> Tuple[list, list]: + indices = list(range(len(a))) + shuffle(indices) + a = [a[index] for index in indices] + b = [b[index] for index in indices] + return a, b + + +def _pick_from_list_after_sorting_other(a: list, b: list[int]) -> list: + indices = [i[0] for i in sorted(enumerate(b), key=lambda x: x[1])] + return [a[index] for index in indices] + + +def sample_list(indices: list, cost: list[int], count: int = None) -> list: + if count is None: + count = len(indices) + indices, cost = _shuffle_two_lists(indices, cost) + indices = _pick_from_list_after_sorting_other(indices, cost)[:count] + return indices + + +@dataclass +class Timer: + ref: float = None + running: bool = False + max_mins: float = float(getenv("TIMER")) + default: str = ("00", "00") + + def __post_init__(self): + self.max_seconds = self.max_mins * SECS_IN_MIN + + def start(self): + self.ref = time() + self.max_seconds + self.running = True + + def stop(self): + self.ref = None + self.running = False + + def get(self): + if not self.running: + return self.default + total_seconds = self.ref - time() + if total_seconds < 0: + self.stop() + return self.default + mins = f"{int(total_seconds // SECS_IN_MIN):02d}" + secs = f"{int(total_seconds % SECS_IN_MIN):02d}" + return mins, secs -- cgit v1.3.1