diff options
author | 2020-09-24 18:54:10 +0300 | |
---|---|---|
committer | 2020-09-24 18:54:10 +0300 | |
commit | 69d2292ec4b3fb2dc83f291ef1ed7bc86eabfd09 (patch) | |
tree | b0c3c0991eef3fc278a0977baf129a7205ff469c /bot/utils/randomization.py | |
parent | Merge remote-tracking branch 'origin/tic-tac-toe' into tic-tac-toe (diff) | |
parent | Merge pull request #456 from Anubhav1603/update_dpy (diff) |
Merge branch 'master' into tic-tac-toe
Diffstat (limited to 'bot/utils/randomization.py')
-rw-r--r-- | bot/utils/randomization.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/bot/utils/randomization.py b/bot/utils/randomization.py new file mode 100644 index 00000000..8f47679a --- /dev/null +++ b/bot/utils/randomization.py @@ -0,0 +1,23 @@ +import itertools +import random +import typing as t + + +class RandomCycle: + """ + Cycles through elements from a randomly shuffled iterable, repeating indefinitely. + + The iterable is reshuffled after each full cycle. + """ + + def __init__(self, iterable: t.Iterable) -> None: + self.iterable = list(iterable) + self.index = itertools.cycle(range(len(iterable))) + + def __next__(self) -> t.Any: + idx = next(self.index) + + if idx == 0: + random.shuffle(self.iterable) + + return self.iterable[idx] |