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