package math.statistics;

import math.Maths;


/*************************************************************************
 *  Compilation:  javac Craps.java
 *  Execution:    java Craps
 *  
 *  Play 1 million games of craps and print probability of winning.
 *
 *  Craps simulation of "pass bet"           
 *  True odds of winning = 244/495 = 0.4929292929...
 * 
 *  % java Craps
 *  Winning percentage = 0.493396
 *
 *  % java Craps
 *  Winning percentage = 0.492537
 *
 *  % java Craps
 *  Winning percentage = 0.492998
 * 
 *************************************************************************/

public class Craps {

    // return sum of two dice
    public static int sumOfTwoDice() {
        int x = 1 + Maths.random(6);
        int y = 1 + Maths.random(6);
        return x + y;
    }


   /***********************************************************************
    * Pass bet:
    *
    * Player rolls two dice. Let x be sum.
    *   - if x is 7 or 11 instant win
    *   - if x is 2, 3, or 12 instant loss
    *   - otherwise player repeatedly rolls two dice until sum is x or 7
    *        if sum is x then win
    *        if sum is 7 then lose
    ***********************************************************************/
    public static boolean winsPassBet() {
        int x = sumOfTwoDice();
        if (x == 7 || x == 11)           return true;
        if (x == 2 || x == 3 || x == 12) return false;

        while (true) {
            int y = sumOfTwoDice();
            if (y == 7) return false;
            if (y == x) return true;
        } 
    }



   /***********************************************************************
    *  Run simulation of pass bet N times  
    *  Output winning percentage.          
    ***********************************************************************/
    public static void main(String[] args) { 
        int N = 1000000;       // number of pass bets to simulate
        int wins = 0;          // number of pass bets won

        for (int i = 0; i < N; i++)
            if (winsPassBet()) wins++;

        System.out.println("Winning percentage = " + 1.0 * wins / N);
    }

}
