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.5.tar.gz (4.5 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.5-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

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

Hashes for yates_rng-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b232edfd81082ed2091da2809c00eee965ca79f6e87f3f68a73164c9e1925eeb
MD5 659b803e160ef0983caaca62d3b3239f
BLAKE2b-256 1aec2d87f917a546935c18609f7f7d8e0e5f324ce1a2b5b263aea2e6e07a7658

See more details on using hashes here.

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

Hashes for yates_rng-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fe6e8f0f19a19d7f61f3e43d41c0d2d4848929d5d3a61efce3062f9f268b646e
MD5 91c4230d443f97621282ffd692d118dd
BLAKE2b-256 1ee17fce472323f40d7532276728c49de1c9a3a9f52b0acffda727b1e4219fc9

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