Skip to content

Instantly share code, notes, and snippets.

@int3rlop3r
Last active December 25, 2021 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save int3rlop3r/e9d4c58fe3474240e4b63513c0ec1e62 to your computer and use it in GitHub Desktop.
Save int3rlop3r/e9d4c58fe3474240e4b63513c0ec1e62 to your computer and use it in GitHub Desktop.
A poor man's random number generator
import time
import hashlib
import sys
from queue import Queue
def get_seed():
t = str(time.time()).encode()
h = hashlib.md5(t)
return int(h.hexdigest(), 16)
def bisect_rand(lower, upper):
nos = upper - lower
pos = get_seed() % nos
return lower + pos
def generate_lazy(limit):
q = Queue()
q.put((0, limit))
while not q.empty():
lower, upper = q.get()
num = lower
if lower != upper:
num = bisect_rand(lower, upper)
nextlower, nextupper = num+1, num-1
if nextupper >= lower:
q.put((lower, nextupper))
if nextlower <= upper:
q.put((nextlower, upper))
yield num
q.task_done()
def generate(limit):
return list(generate_lazy(limit))
if __name__ == '__main__':
try:
limit = int(sys.argv[1])
except:
print(f"usage: python {sys.argv[0]} <limit>")
else:
for i in generate_lazy(limit):
print(f"{i}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment