A random number generator based on shuffled English words, their ASCII values, and the current epoch time to create highly randomized outputs
Project description
random_algorithm
A very simple yet original random algo made while overthinking about randomness
random_algorithm
is a Python library that generates random numbers using a novel approach based on English words and the current epoch time. It utilizes ASCII values of shuffled words, reduces them to single digits, and combines these digits to generate a random number of a specified size. This implementation attempts to get as close as possible to true randomness by using time-based factors and word shuffling.
Features
- Generates random numbers based on shuffled English words.
- ASCII values of each word are reduced to single digits.
- Supports dynamic generation of random numbers of any specified size.
- Includes special logic to generate lower numbers (like
0
or1
), which can sometimes be difficult to produce with traditional randomization methods. - Provides functions to extract seeds based on time and to reduce any number to a single digit.
Usage
Install the package in your repo
pip install random_algorithm
If you use a requirements file, add this line to it :
random_algorithm==1.1.0
You can import and use the library in your Python code like this :
from random_algorithm import gen_random
Example :
Generate a random number with a desired size of 5 digits
random_number = gen_random(desired_size=5)
print(f"Generated random number : {random_number}")
You can also use the following internal functions :
ascii_reduce(word, index)
:- Takes a word (ex
"github"
) and an index (can be any positive number) as input. - Reduces the word to a single digit (returns an
int
).
- Takes a word (ex
reduce_to_single_digit(n)
:- Reduces any integer
n
to a single digit by summing its digits repeatedly until one digit remains. - For example,
reduce_to_single_digit(9875)
would return2
.
- Reduces any integer
get_time_seed()
:- Generates a seed based on the current time and ASCII reduction of character permutations.
Handling errors
gen_random()
will raise the following exceptions if invalid inputs are provided :
TypeError
: Raised whendesired_size
is not an integer.ValueError
: Raised whendesired_size
is less than 1.
[!WARNING]
The code works fine but isn't the most optimized ever.
Generating huge numbers will take a lot of time ! I you really need a big random number, call the function multiple times with low numbers (ex 1 or 2) and concatenate the results
How it works
- Word shuffling : The words from
wordlist.txt
are shuffled on each call to ensure randomness. - Random index : The current epoch time is used to generate a random index into the shuffled word list.
- ASCII reduction : Each word's ASCII values are reduced to single digits and then summed to produce a random number.
- Low numbers handling : A special condition ensures that numbers like
0
and1
can be generated using the current epoch time modulo operations. -
- Time Seed:
get_time_seed()
creates a seed value based on permutations of characters from the current time.
- Time Seed:
Contributing
Feel free to open an issue or a pull request if you want to contribute to this project
How to build ?
py -m pip install --upgrade pip build twine setuptools wheel
py -m build
py -m twine check dist/*
# Optional : publish to test.pypi.org
py -m twine upload --repository testpypi dist/*
# Or to pypi.org
py -m twine upload dist/*
License
This project is licensed under the MIT License - see the LICENSE file for details.
The wordlist comes from from https://github.com/dwyl/english-words.
Authors
- EDM115 - Initial work
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for random_algorithm-1.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 18c17ae395ae5ca0f075637676e08bc8d885ac9d24ba3783f1f8df1be90b9b46 |
|
MD5 | acb34027731a8d02c5a56d0d9db92aee |
|
BLAKE2b-256 | 997c6fd1c0326e1f709514e66f463c03f3cb2b6e6c800009b81e5e8bdb8f608f |