public class Checkers {

    public static boolean f0( double x ) {
	return (0.0 <= x) && (x < 1.0);
    } // f0( double )

    public static boolean f1( double [] data ) {
	boolean result = true;
	for( int i = 0; i < data.length; i++ ) {
	    double x = data[i];
	    result = result && f0(x);
	} // for
	return result;
    } // f1( double [] )

    public static boolean f2( double x, double y ) {
	return Math.abs(x - y) < 1E-8;
    } // f2( double, double )

    public static boolean f3( double [] data ) {
	double s = 0.0;
	for( int i = 0; i < data.length; i++ ) {
	    s = s + data[i];
	} // for
	return f2( s, 1.0 );
    } // f3( double [] )

    public static boolean f4( double [] data ) {
	return f1(data) && f3(data);
    } // f4( double [] )

    public static boolean f5( double [] data ) {
	boolean result = true;
	for( int i = 1; i < data.length; i++ ) {
	    result = result && (data[i - 1] <= data[i]);
	} // for
	return result;
    } // f5( double [] )

    public static boolean f6( double [] data ) {
	return f1(data) && f5(data) && f2(data[data.length - 1], 1.0);
    } // f6( double [] )

    public static double f7( double [] data ) {
	double result = data[0];
	for( int i = 1; i < data.length; i++ ) {
	    if( data[i] < result ) {
		result = data[i];
	    } // if
	} // for
	return result;
    } // f7( double [] )

    public static double f8( double [] data ) {
	double result = data[0];
	for( int i = 1; i < data.length; i++ ) {
	    if( data[i] > result ) {
		result = data[i];
	    } // if
	} // for
	return result;
    } // f8( double [] )

    public static boolean f9( double [] data ) {
	return (f7(data) >= 0.0) && (f8(data) < 1.0);
    } // f9( double [] )

    public static double [] f10( int n ) {
	double [] result = new double[ n ];

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

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

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

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

	return result;
    } // f10( int )

    public static int f11( double [] data ) {
	int i = 0;
	double r = Math.random();
	while( r > data[i] ) {
	    i = i + 1;
	} // while
	return i;
    } // f11( double [] )

    public static void main( String [] args ) {

	double [] cdf = f10( 3 );

	System.out.printf( "%8.2f %8.2f %8.2f\n", cdf[0], cdf[1], cdf[2] );


	int [] histogram = new int[ cdf.length ];
	for( int i = 0; i < 1000000; i++ ) {
	    histogram[ f11(cdf) ]++;
	} // for

	System.out.printf( "%8d %8d %8d\n", histogram[0], histogram[1],
			   histogram[2] );


    } // main( String [] )

} // Checkers