Skip to main content

Maximize your score in a turn of the Generala dice game

Project description

🎲 generala

CI Ruff uv Publish PyPI PyPI - Python Version

generala is a probabilistic tool for the dice game of Generala.

generala helps you decide which dice to hold after each roll. Starting from the dice you have, the tool considers all possible future rolls to find which combinations of held dice give the best expected scores for the different categories. While written in pure Python—which is not at all efficient for these kinds of tasks—, it uses multiprocessing to lower the computation times to just a few seconds per invocation at the most.

The categories and scores in the tool correspond to the variant of the game played in my family. As there are many variants of the game—each of which assigns scores to the categories differently—you may want to check out the generala.categories module and modify it as desired.

Installation

generala is available as a Python package on PyPI. Assuming you have Python 3.9 or later, install it by running the command:

$ pip install generala

or:

$ python3 -m pip install generala

Usage

Command-line usage

Suppose we got the dice (4,4,1,2,6) on the first roll in a game. Run generala as:

$ generala 1 44126

or, alternatively:

$ python3 -m generala 1 44126

The program responds with the best expected scores for each category. The third column ("Hold dice") tells us which dice we should hold for the expected score to apply. The final row ("any") looks to maximize the overall expected score irrespective of category.

Computing. This may take a few seconds....
   Category    Expected score Hold dice
      1s             2.22     1
      2s             4.44     2
      3s             4.58     none
      4s            11.67     44
      5s             7.64     none
      6s            13.33     6
   Straight          5.52     24
  Full house        13.47     44
Four of a kind      17.18     44
   Generala          2.91     44
Double Generala      0.00     any
      any           33.15     44

Let's say we kept (4,4) and got (5,4,3) on the second roll. We run generala again:

$ generala 2 44543

The tool outputs:

   Category    Expected score Hold dice
      1s             0.83     none
      2s             1.67     none
      3s             5.00     3
      4s            13.33     444
      5s             8.33     5
      6s             5.00     none
   Straight          3.33     345
  Full house         8.33     4445 or 3444
Four of a kind      22.22     444
   Generala          2.78     444
Double Generala      0.00     any
      any           38.61     444

After the third and final roll, the tool can give the final scores. Assuming we have the dice (4,4,4,3,2):

$ generala 3 44432
   Category      Score   
      1s            0
      2s            2
      3s            3
      4s           12
      5s            0
      6s            0
   Straight         0
  Full house        0
Four of a kind      0
   Generala         0
Double Generala     0
      any          12

Closed categories

You can also specify, via options, which categories are closed (i.e., no longer available for scoring). For example, with:

$ generala -46fpg 1 44126

we tell the tool that the categories 4s, 6s, Full house, Four of a kind, and Generala are closed—which results in those categories not being considered in the computation:

   Category    Expected score Hold dice
      1s             2.22     1
      2s             4.44     2
      3s             4.58     none
      5s             7.64     none
   Straight          5.52     24
Double Generala      5.81     44
      any           12.00     44

For a list of all available options, run:

$ generala --help

As a Python library

It is also possible to call into the functionality from a Python program. Here's an example.

from generala import expected_score, counts, dice
from generala.categories import straight, all_categories

c = counts((4,4,1,2,6))

score, held = expected_score(category=straight, counts=c, roll=1, open_categories=all_categories, return_held=True)

print("Hold dice {}. Expected score: {:.2f}".format(dice(held[0]), score))

When run, that snippet will print:

Hold dice (2, 4). Expected score: 5.52

That's all. Good luck!

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

generala-1.1.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

generala-1.1.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file generala-1.1.0.tar.gz.

File metadata

  • Download URL: generala-1.1.0.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.5.4

File hashes

Hashes for generala-1.1.0.tar.gz
Algorithm Hash digest
SHA256 013c15da83f1fa5d99de6688d7e1a5797561ea86e7e17c91ebf8dc9a46897859
MD5 d6f2b5bc02eb82134bfc0a35c69edfb5
BLAKE2b-256 d8893b932cbe3a352750e5290f8643c6a0edea967d6c63b7fa75088096757115

See more details on using hashes here.

File details

Details for the file generala-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for generala-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 504dedfc495e292da3203ab67f92ff13d44ca3d0d504cd4aa6dc5f9990b69956
MD5 227bc2dbafe3592f9a512ba38c10434c
BLAKE2b-256 c122dbc0553edd2e921904904d75380f9be8e2ca9242e66e175b0d89b8882fcc

See more details on using hashes here.

Supported by

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