package probably;

public class Probably {

    public static double [] make(int m){
	double [] bubble = new double[m];
	for(int i = 0; i < bubble.length; i++){
	    bubble[i] = Math.random();
	    
	} // for
	return bubble;
    } // make( int )

    public static void print(double [] things){
	for(int i = 0; i < things.length; i++){
	    System.out.println(things[i]);
	} // for
    } // print( double [] )

    public static double sum(double [] oranges ){
	double total = 0;
	for(int i = 0; i < oranges.length; i++){
	    total = total + oranges[i];
	} // for
	return total;
    } // sum( double [] )

    public static double [] pdf( double [] numbers ) {
	double [] result = new double[ numbers.length ];
	double s = sum( numbers );

	for( int i = 0; i < result.length; i++ ) {
	    result[i] = numbers[i]/s;
	} // for

	return result;
    } // pdf( double [] )


    public static int posOfFirstGreater( double [] data, double r ) {
	int index = 0;

	//System.out.println( "\t " + r + " <? data[" + 
        //  index + "] = " + data[index] );

	while( index < data.length && r > data[index] ) {
	    //System.out.println( "\t " + r + " <? data[" + 
            //    index + "] = " + data[index] );
	    index++;
	} // while

	//System.out.println();
	return index;
    } // posOfFirstGreater( double [], double )

    public static double [] pdf2cdf( double [] p ) {
	double [] result = new double[ p.length ];

	result[0] = p[0];
	for( int i = 1; i < result.length; i++ ) {
	    result[i] = p[i] + result[i-1];
	} // for

	return result;
    } // pdf2cdf( double [] )

    public static void main(String[] cheese) {
	//System.out.println("hello");
	double [] trouble = make (10);
	//print(trouble);
	//System.out.println();

	double [] stuff = {1, 2, 3};
	//System.out.println(sum(stuff));
	//System.out.println();

	double [] dist = pdf( stuff );
	//print( dist );


	//System.out.println();

	//print( pdf2cdf( dist ) );

	double [] cdf = pdf2cdf( dist );
	int [] outcomes = new int[ cdf.length ];
	for( int i = 0; i < outcomes.length; i++ ) {
	    outcomes[i] = 0;
	} // for

	for( int i = 0; i < 1000000; i++ ) {
	    double r = Math.random();
	    int event = posOfFirstGreater( cdf, r );
	    outcomes[event]++;
	} // for

	System.out.println( "# of event 0 = " + outcomes[0] );
	System.out.println( "# of event 1 = " + outcomes[1] );
	System.out.println( "# of event 2 = " + outcomes[2] );


    } // main( String [] )

} // Probably