Skip to main content

Terminal decision-support REPL and EV solver for Camel Up

Project description

camel-up-solver

A terminal decision-support REPL for Camel Up. Feed it the table state (rolls, tiles, ticket grabs) as the game plays out, then ask /sim for the EV of each available bet or /verify for an exact answer.

camelup> /setup random
camelup> /take g mine
camelup> /tile 5 oasis mine
camelup> /roll y 3
camelup> /sim

Install

You need Python 3.9+ and pipx.

pipx install git+https://github.com/<you>/camel-up-solver

That puts a camelup shim on your PATH. Run it from anywhere:

camelup

To update later:

pipx upgrade camel-up-solver

Without pipx (from a clone)

git clone https://github.com/<you>/camel-up-solver
cd camel-up-solver
pip install -e .
camelup

-e installs in editable mode so source edits take effect immediately. If you'd rather not install at all, you can run the package directly from src/:

PYTHONPATH=src python -m camel_up

Commands

All commands start with /. Type /help inside the REPL for the full list.

command what it does
/setup r=1 b=1 g=2 y=3 p=2 w=16 k=16 seed each camel's starting space
/setup random random rule-ish starting placement (debug)
/roll <color> <1-3> [mine] a die popped this turn; mine = you pulled it (+1 pyramid coin)
/tile <space> oasis|mirage [mine] place a desert tile (mine = you placed it)
/take <color> [mine] someone claimed the top leg-bet ticket (mine = you took it)
/endleg manually end the leg; also fires automatically when the pyramid empties
/show print the current board
/undo undo the last action
/sim [n] Monte Carlo EV of every leg bet + race odds (default 10,000 rollouts)
/verify EXACT leg-bet EV via full completion enumeration
/help command reference
/quit exit

Colors: r b g y p for the racing camels (red/blue/green/yellow/purple); w (white) and k (black) for the crazy/backward camels.

How it works

  • The leg is small enough to solve exactly (/verify enumerates every remaining permutation × outcome — tractable up to ~1M completions, instant once a die or two has been rolled).
  • The full race spans many legs and is Monte Carlo only.
  • Held tickets pay out automatically at /endleg from the final board: 1st = +face value, 2nd = +1, 3rd-5th = -1.

Programmatic use

from camel_up import Game, run_sim, run_verify

g = Game()
g.do_setup(['random'])
g.dispatch('take g mine')
g.dispatch('roll y 3')
run_sim(g, 10_000)
run_verify(g)

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

camel_up_solver-0.1.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

camel_up_solver-0.1.0-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

Details for the file camel_up_solver-0.1.0.tar.gz.

File metadata

  • Download URL: camel_up_solver-0.1.0.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for camel_up_solver-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f435fe1708958f1a826e933ad3d82374a9a9127cb9dba6f70931981bdf6d1e5f
MD5 84ebc871d1433047f87abe74b50ccb6c
BLAKE2b-256 06145fcc7cefb199979015ccd55174f4808cf8914ed20ecdd10aad355b6d54ff

See more details on using hashes here.

File details

Details for the file camel_up_solver-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for camel_up_solver-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d5af50d12c804b7e70f4605e74a965e340c144855c30ae254fc92e8e3c33423
MD5 afa437305b5edf2e885969e07141b5d9
BLAKE2b-256 0d1581fe2d636b8b488ffd4c12e6e62a82d9a43607646fd014431f6c8e60ef77

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