Maximize your score in a turn of the Generala dice game
Project description
🎲 generala
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 013c15da83f1fa5d99de6688d7e1a5797561ea86e7e17c91ebf8dc9a46897859 |
|
MD5 | d6f2b5bc02eb82134bfc0a35c69edfb5 |
|
BLAKE2b-256 | d8893b932cbe3a352750e5290f8643c6a0edea967d6c63b7fa75088096757115 |
File details
Details for the file generala-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: generala-1.1.0-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.5.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 504dedfc495e292da3203ab67f92ff13d44ca3d0d504cd4aa6dc5f9990b69956 |
|
MD5 | 227bc2dbafe3592f9a512ba38c10434c |
|
BLAKE2b-256 | c122dbc0553edd2e921904904d75380f9be8e2ca9242e66e175b0d89b8882fcc |