Skip to main content

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

yates_rng-0.1.1.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yates_rng-0.1.1-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

Details for the file yates_rng-0.1.1.tar.gz.

File metadata

  • Download URL: yates_rng-0.1.1.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for yates_rng-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2d7b898c1a377611aefb4912e1c3e18400ea28d7d40ad4bfa890d33e345947d1
MD5 51f9db93c24a84ad359f1b041320fa33
BLAKE2b-256 af0832c94fd6a0ceccefd8df9bafe0a3d98f73bb68b635b36e57a876263e058d

See more details on using hashes here.

File details

Details for the file yates_rng-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: yates_rng-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for yates_rng-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 361123220cba8ef24cd2a2bbb3e8ea1cecafb6936d857c691fe3d2aeb37a88bf
MD5 ea7eb02316b974b032c7ae46955e4515
BLAKE2b-256 ae6788cae25efc80ae1010e7a138a89116977da66765d9acfc9e15519693b8bf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page