Random search, shuffle, and pick using a custom RanBit RNG and fisher-yates algorithm
Project description
๐ฆ yates_rng
Yates RNG is a lightweight Python package that provides:
A custom ultra-fast XOR-shift inspired random generator (RanBit)
Randomized array search (domino_search)
Random shuffle (domino_shuffle)
Random element picking (domino_pick)
All randomness is powered by the RanBit engine, which uses a time-based seed to produce a new pseudo-random sequence on each run.
Inspired by the X-Men character Domino, this package focuses on probability manipulation, fast randomness, and lightweight random utilities.
๐ Features
๐ฅ RanBit โ fast custom random number generator
๐ domino_search โ random search with neighbor optimization
๐ domino_shuffle โ random array shuffling
๐ฏ domino_pick โ fast random element selector
โฑ๏ธ Time-seeded RNG: every run produces unique randomness
๐งฉ No external dependencies
โก Very lightweight and fast โ optimized for small/medium arrays
๐ฎ Great for games, probabilistic algorithms, randomized utilities
๐ฅ Installation
Once published to PyPI:
pip install domino_rng
๐ Usage ๐ Import the functions from yates_rng import domino_search, domino_shuffle, domino_pick
๐ Example โ Random Search from yates_rng import domino_search
arr = [2, 5, 6, 7, 2, 10] result = domino_search(arr, 10)
print("Found at search iteration:", result)
domino_search returns the iteration number at which the target is found.
๐ Example โ Shuffle an Array from yates_rng import domino_shuffle
arr = [5, 1, 4, 8, 2, 11, 0, -1, 2] shuffled = domino_shuffle(arr)
print(shuffled)
Each run produces a different random shuffle.
๐ฏ Example โ Random Pick from yates_rng import domino_pick
print(domino_pick([1, 2, 3, 4, 5]))
Returns a random element from the list.
๐ง Algorithm Details RanBit โ Custom Random Generator
Domino RNG uses a custom XOR-shift algorithm:
x ^= x << 13 x ^= x >> 17 x ^= x << 5
This produces a fast 32-bit pseudo-random sequence. A time-based seed (time.time() * 1000) ensures every program run is unique.
domino_search โ Random Search with Neighbor Check
This search algorithm:
Randomly selects an index r
Also checks the neighbor r-1
If either matches the target, search ends
Otherwise, the two checked elements are swapped away from the search range
Search becomes faster and avoids repeated checks
It produces a probabilistic search sequence that reduces redundant operations.
domino_shuffle โ Randomized Fisher-Yates Variant
Randomly picks an index using RanBit
Swaps it with the current end of the array
Moves the boundary to avoid reusing elements
Very fast and lightweight
๐ฆ Project Structure
yates_rng/
โ
โโโ yates_rng/
โ โโโ init.py
โ โโโ yates.py
โ
โ
โโโ setup.py
โโโ README.md
โโโ LICENSE
๐ ๏ธ Implementation Philosophy
Keep RNG internal and invisible to user
Expose simple API functions only
Maintain a clean, minimal interface
Provide deterministic logic without external dependencies
Make randomness fast, small, and efficient
๐งช Performance Notes
Faster than Python's built-in random for small array operations
Ideal for:
random searching
small Monte-Carlo steps
shuffling lists
producing quick random choices
game logic where lightweight RNG is needed
Not a cryptographic RNG
โ ๏ธ Disclaimer
This RNG is not suitable for:
Cryptographic security
Scientific simulations requiring high-quality random distribution
It is intended for lightweight, high-speed probabilistic operations.
๐จโ๐ป Author
Shiv Shankar N Developer of the Domino RNG package.
โญ Contribution
Pull requests and suggestions are welcome. Feel free to open issues for discussions or improvements.
๐ License
MIT License Free to use, modify, and distribute.
Project details
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yates_rng-0.1.5.tar.gz.
File metadata
- Download URL: yates_rng-0.1.5.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b232edfd81082ed2091da2809c00eee965ca79f6e87f3f68a73164c9e1925eeb
|
|
| MD5 |
659b803e160ef0983caaca62d3b3239f
|
|
| BLAKE2b-256 |
1aec2d87f917a546935c18609f7f7d8e0e5f324ce1a2b5b263aea2e6e07a7658
|
File details
Details for the file yates_rng-0.1.5-py3-none-any.whl.
File metadata
- Download URL: yates_rng-0.1.5-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe6e8f0f19a19d7f61f3e43d41c0d2d4848929d5d3a61efce3062f9f268b646e
|
|
| MD5 |
91c4230d443f97621282ffd692d118dd
|
|
| BLAKE2b-256 |
1ee17fce472323f40d7532276728c49de1c9a3a9f52b0acffda727b1e4219fc9
|