aboutsummaryrefslogtreecommitdiff
path: root/src/match_up/utilities.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/match_up/utilities.py')
-rw-r--r--src/match_up/utilities.py58
1 files changed, 58 insertions, 0 deletions
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