mirror of
https://github.com/TACIXAT/XorShift128Plus
synced 2025-05-13 17:44:05 +00:00
93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
import math
|
|
from z3 import *
|
|
|
|
from ChromeRandomnessPredictor import ChromeRandomnessPredictor
|
|
from FirefoxAndSafariRandomnessPredictor import FirefoxAndSafariRandomnessPredictor
|
|
|
|
|
|
# Print 'last seen' random number
|
|
# and winning numbers following that.
|
|
# This was for debugging. We know that Math.random()
|
|
# is called in the browser zero times (updated) for each page click
|
|
# in Chrome and once for each page click in Firefox.
|
|
# Since we have to click once to enter the numbers
|
|
# and once for Play, we indicate the winning numbers
|
|
# with an arrow.
|
|
def power_ball(browser, generated, skip=4):
|
|
# for each random number (skip 4 of 5 that we generated)
|
|
for idx in range(len(generated[skip:])):
|
|
# powerball range is 1 to 69
|
|
poss = list(range(1, 70))
|
|
# base index 4 to skip
|
|
gen = generated[skip + idx :]
|
|
# get 'last seen' number
|
|
g0 = gen[0]
|
|
gen = gen[1:]
|
|
# make sure we have enough numbers
|
|
if len(gen) < 6:
|
|
break
|
|
print(g0)
|
|
|
|
# generate 5 winning numbers
|
|
nums = []
|
|
for jdx in range(5):
|
|
index = int(gen[jdx] * len(poss))
|
|
val = poss[index]
|
|
poss = poss[:index] + poss[index + 1 :]
|
|
nums.append(val)
|
|
|
|
# print indicator
|
|
if idx == 0 and browser == "chrome":
|
|
print("--->", end="")
|
|
elif idx == 2 and browser == "firefox":
|
|
print("--->", end="")
|
|
else:
|
|
print(" ", end="")
|
|
# print winning numbers
|
|
print(sorted(nums), end="")
|
|
|
|
# generate / print power number or w/e it's called
|
|
double = gen[skip + 1]
|
|
val = int(math.floor(double * 26) + 1)
|
|
print(val)
|
|
|
|
|
|
def main():
|
|
browser = "chrome" # | 'safari' | 'firefox'
|
|
print("BROWSER: %s" % browser)
|
|
|
|
# In your browser's JavaScript console:
|
|
# - For Chrome/Firefox : `Array.from({ length: 5 }, Math.random);`
|
|
# - For Safari : `JSON.stringify(Array.from({ length: 5 }, Math.random), null, 2);`
|
|
# Enter at least the 5 first random numbers you observed here:
|
|
# Observations show all browsers need ~5
|
|
sequence = [
|
|
0.5368584449767335,
|
|
0.883588766746984,
|
|
0.7895949638905317,
|
|
0.5106241305628436,
|
|
0.49965622623126693,
|
|
]
|
|
|
|
print(sequence)
|
|
# Add original created random numbers to generated (copy the list)
|
|
generated = sequence[:]
|
|
|
|
RANDOM_NUMBERS_TO_GENERATE = 10
|
|
|
|
if browser == "chrome":
|
|
predictor = ChromeRandomnessPredictor(sequence)
|
|
elif browser == "firefox" or browser == "safari":
|
|
predictor = FirefoxAndSafariRandomnessPredictor(sequence)
|
|
else:
|
|
raise Exception(f"unknown browser {browser}")
|
|
|
|
for _ in range(RANDOM_NUMBERS_TO_GENERATE):
|
|
next = predictor.predict_next()
|
|
generated.append(next)
|
|
# use generated numbers to predict powerball numbers
|
|
power_ball(browser=browser, generated=generated, skip=len(sequence))
|
|
|
|
|
|
main()
|