1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#![deny(missing_docs)]
//! Camel Up is a game of chance.
//!
//! Since probability questions are often very hard. This crate provides an oracle to answer questions concerning which camel will come out ahead in the race.
//!
//! # Example
//! To determine who has the better winning chance of two camels, where one camel has fallen two behind one could use the following code.
//!
//! ```
//! use camel_up::prelude::*;
//! let race = "r,,w".parse::<Race>().expect("to parse");
//! let dice = "rw".parse::<Dice>().expect("to parse");
//!
//! let result = project(&race, &dice);
//! let red_chance = result.winner[&Camel::Red];
//! let white_chance = result.winner[&Camel::White];
//!
//! assert!(white_chance > red_chance);
//! ```
//!
//! ## Parsing of Race
//! As the above example shows one can parse a string and get a `Race`. The following table describes each symbol.alloc
//!
//! | Symbol | Marker      |
//! |--------|-------------|
//! | r      | Red         |
//! | o      | Orange      |
//! | y      | Yellow      |
//! | g      | Green       |
//! | w      | White       |
//! | ,      | Divider     |
//! | +      | Oasis       |
//! | -      | FataMorgana |
//!
//! As per the rules of the game, camels can not be in a oasis or a fata morgana, nor can either of those be next to each other. So the following strings all fail to parse.
//!
//! ```
//! use camel_up::camel::*;
//! assert_eq!("r|y".parse::<Race>(), Err(RaceParseError::NotAMarker(NotAMarker::But("|".to_owned()))));
//! assert_eq!("+r,y".parse::<Race>(), Err(RaceParseError::CamelInOasis));
//! assert_eq!("-r,y".parse::<Race>(), Err(RaceParseError::CamelInFataMorgana));
//! assert_eq!("r,-+,y".parse::<Race>(), Err(RaceParseError::ToManyAdjustmentsInOnePosition));
//! assert_eq!("r,-,+,y".parse::<Race>(), Err(RaceParseError::ConsecutiveAdjustments));
//! ```
//! 
//! ## Parsing of Dice
//! Dice can be similarly parsed. The only allowed symbols are the ones for the camels.

pub mod camel;
pub mod fraction;
pub mod oracle;
mod tree;

pub mod prelude {
    //! Easy access to a good combination of camel up related concepts.

    pub use crate::camel::{Camel, Dice, Race};
    pub use crate::fraction::Fraction;
    pub use crate::oracle::project;
}