import java.util.* ;
import java.lang.* ;
import java.io.* ;
class Ideone {
static class Child {
boolean female;
boolean florida;
public Child( boolean female, boolean florida) {
this .female = female;
this .florida = female && florida;
}
}
public static void main
( String [ ] args
) { final int FLORIDA_ONE_IN
= args.
length > 0 ? Integer .
parseInt ( args
[ 0 ] ) : 10 ; final Child[ ] [ ] children = new Child[ 1000000 ] [ ] ;
System .
out .
println ( "Generating" ) ; for ( int i = 0 ; i < children.length ; i++ ) {
Child[ ] pair = new Child[ 2 ] ;
pair[ 0 ] = new Child( rnd.nextInt ( 2 ) == 0 , rnd.nextInt ( FLORIDA_ONE_IN) == 0 ) ;
pair[ 1 ] = new Child( rnd.nextInt ( 2 ) == 0 , rnd.nextInt ( FLORIDA_ONE_IN) == 0 ) ;
children[ i] = pair;
}
System .
out .
println ( "Counting" ) ; int oneIsGirl = 0 ;
int bothGirls = 0 ;
int oneIsFlorida = 0 ;
int oneFloridaBothGirls = 0 ;
int oneIsFloridaUnique = 0 ;
int oneFloridaBothGirlsUnique = 0 ;
for ( int i = 0 ; i < children.length ; i++ ) {
Child[ ] pair = children[ i] ;
if ( pair[ 0 ] .female || pair[ 1 ] .female ) {
oneIsGirl++;
if ( pair[ 0 ] .female && pair[ 1 ] .female ) {
bothGirls++;
}
}
if ( pair[ 0 ] .florida || pair[ 1 ] .florida ) {
oneIsFlorida++;
oneIsFloridaUnique++;
if ( pair[ 0 ] .female && pair[ 1 ] .female ) {
oneFloridaBothGirls++;
oneFloridaBothGirlsUnique++;
if ( pair[ 0 ] .florida && pair[ 1 ] .florida ) {
// not unique, remove from data
oneIsFloridaUnique--;
oneFloridaBothGirlsUnique--;
}
}
}
}
System .
out .
printf ( ">1 girl %7d%n" , oneIsGirl
) ; System .
out .
printf ( "both girls %7d%n" , bothGirls
) ; System .
out .
printf ( "chance %9.2f%%%n" ,
( 100f
* bothGirls
) / oneIsGirl
) ; System .
out .
printf ( ">1 Florida %7d%n" , oneIsFlorida
) ; System .
out .
printf ( "both girls(F) %7d%n" , oneFloridaBothGirls
) ; System .
out .
printf ( "chance %9.2f%%%n" ,
( 100f
* oneFloridaBothGirls
) / oneIsFlorida
) ; System .
out .
printf ( ">1 Florida(U) %7d%n" , oneIsFloridaUnique
) ; System .
out .
printf ( "both girls(FU) %7d%n" , oneFloridaBothGirlsUnique
) ; System .
out .
printf ( "chance %9.2f%%%n" ,
( 100f
* oneFloridaBothGirlsUnique
) / oneIsFloridaUnique
) ; System .
out .
println ( "Captain Hindsight to the rescue??" ) ; int randomIsGirl = 0 ;
bothGirls = 0 ;
for ( int i = 0 ; i < children.length ; i++ ) {
Child[ ] pair = children[ i] ;
int c = rnd.nextInt ( 2 ) ;
if ( pair[ c] .female ) {
randomIsGirl++;
if ( pair[ 1 - c] .female ) {
bothGirls++;
}
}
}
System .
out .
printf ( "random is girl %7d%n" , randomIsGirl
) ; System .
out .
printf ( "both girls %7d%n" , bothGirls
) ; System .
out .
printf ( "chance %9.2f%%%n" ,
( 100f
* bothGirls
) / randomIsGirl
) ; }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUgewoJCiAgICBzdGF0aWMgY2xhc3MgQ2hpbGQgewogICAgICAgIAogICAgICAgIGJvb2xlYW4gZmVtYWxlOwogICAgICAgIGJvb2xlYW4gZmxvcmlkYTsKCiAgICAgICAgcHVibGljIENoaWxkKGJvb2xlYW4gZmVtYWxlLCBib29sZWFuIGZsb3JpZGEpIHsKICAgICAgICAgICAgdGhpcy5mZW1hbGUgPSBmZW1hbGU7CiAgICAgICAgICAgIHRoaXMuZmxvcmlkYSA9IGZlbWFsZSAmJiBmbG9yaWRhOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgZmluYWwgaW50IEZMT1JJREFfT05FX0lOID0gYXJncy5sZW5ndGggPiAwID8gSW50ZWdlci5wYXJzZUludChhcmdzWzBdKSA6IDEwOwogICAgICAgIFJhbmRvbSBybmQgPSBuZXcgUmFuZG9tKCk7CiAgICAgICAgZmluYWwgQ2hpbGRbXVtdIGNoaWxkcmVuID0gbmV3IENoaWxkWzEwMDAwMDBdW107CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZW5lcmF0aW5nIik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBDaGlsZFtdIHBhaXIgPSBuZXcgQ2hpbGRbMl07CiAgICAgICAgICAgIHBhaXJbMF0gPSBuZXcgQ2hpbGQocm5kLm5leHRJbnQoMikgPT0gMCwgcm5kLm5leHRJbnQoRkxPUklEQV9PTkVfSU4pID09IDApOwogICAgICAgICAgICBwYWlyWzFdID0gbmV3IENoaWxkKHJuZC5uZXh0SW50KDIpID09IDAsIHJuZC5uZXh0SW50KEZMT1JJREFfT05FX0lOKSA9PSAwKTsKICAgICAgICAgICAgY2hpbGRyZW5baV0gPSBwYWlyOwogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdW50aW5nIik7CiAgICAgICAgaW50IG9uZUlzR2lybCA9IDA7CiAgICAgICAgaW50IGJvdGhHaXJscyA9IDA7CiAgICAgICAgaW50IG9uZUlzRmxvcmlkYSA9IDA7CiAgICAgICAgaW50IG9uZUZsb3JpZGFCb3RoR2lybHMgPSAwOwogICAgICAgIGludCBvbmVJc0Zsb3JpZGFVbmlxdWUgPSAwOwogICAgICAgIGludCBvbmVGbG9yaWRhQm90aEdpcmxzVW5pcXVlID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIENoaWxkW10gcGFpciA9IGNoaWxkcmVuW2ldOwogICAgICAgICAgICBpZiAocGFpclswXS5mZW1hbGUgfHwgcGFpclsxXS5mZW1hbGUpIHsKICAgICAgICAgICAgICAgIG9uZUlzR2lybCsrOwogICAgICAgICAgICAgICAgaWYgKHBhaXJbMF0uZmVtYWxlICYmIHBhaXJbMV0uZmVtYWxlKSB7CiAgICAgICAgICAgICAgICAgICAgYm90aEdpcmxzKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHBhaXJbMF0uZmxvcmlkYSB8fCBwYWlyWzFdLmZsb3JpZGEpIHsKICAgICAgICAgICAgICAgIG9uZUlzRmxvcmlkYSsrOwogICAgICAgICAgICAgICAgb25lSXNGbG9yaWRhVW5pcXVlKys7CiAgICAgICAgICAgICAgICBpZiAocGFpclswXS5mZW1hbGUgJiYgcGFpclsxXS5mZW1hbGUpIHsKICAgICAgICAgICAgICAgICAgICBvbmVGbG9yaWRhQm90aEdpcmxzKys7CiAgICAgICAgICAgICAgICAgICAgb25lRmxvcmlkYUJvdGhHaXJsc1VuaXF1ZSsrOwogICAgICAgICAgICAgICAgICAgIGlmIChwYWlyWzBdLmZsb3JpZGEgJiYgcGFpclsxXS5mbG9yaWRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCB1bmlxdWUsIHJlbW92ZSBmcm9tIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgb25lSXNGbG9yaWRhVW5pcXVlLS07CiAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZsb3JpZGFCb3RoR2lybHNVbmlxdWUtLTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIj4xIGdpcmwgICAgICAgICU3ZCVuIiwgb25lSXNHaXJsKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiYm90aCBnaXJscyAgICAgJTdkJW4iLCBib3RoR2lybHMpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJjaGFuY2UgICAgICAgICAlOS4yZiUlJW4iLCgxMDBmICogYm90aEdpcmxzKSAvIG9uZUlzR2lybCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIj4xIEZsb3JpZGEgICAgICU3ZCVuIiwgb25lSXNGbG9yaWRhKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiYm90aCBnaXJscyhGKSAgJTdkJW4iLCBvbmVGbG9yaWRhQm90aEdpcmxzKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiY2hhbmNlICAgICAgICAgJTkuMmYlJSVuIiwoMTAwZiAqIG9uZUZsb3JpZGFCb3RoR2lybHMpIC8gb25lSXNGbG9yaWRhKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiPjEgRmxvcmlkYShVKSAgJTdkJW4iLCBvbmVJc0Zsb3JpZGFVbmlxdWUpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJib3RoIGdpcmxzKEZVKSAlN2QlbiIsIG9uZUZsb3JpZGFCb3RoR2lybHNVbmlxdWUpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJjaGFuY2UgICAgICAgICAlOS4yZiUlJW4iLCgxMDBmICogb25lRmxvcmlkYUJvdGhHaXJsc1VuaXF1ZSkgLyBvbmVJc0Zsb3JpZGFVbmlxdWUpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FwdGFpbiBIaW5kc2lnaHQgdG8gdGhlIHJlc2N1ZT8/Iik7CiAgICAgICAgaW50IHJhbmRvbUlzR2lybCA9IDA7CiAgICAgICAgYm90aEdpcmxzID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIENoaWxkW10gcGFpciA9IGNoaWxkcmVuW2ldOwogICAgICAgICAgICBpbnQgYyA9IHJuZC5uZXh0SW50KDIpOwogICAgICAgICAgICBpZiAocGFpcltjXS5mZW1hbGUpIHsKICAgICAgICAgICAgICAgIHJhbmRvbUlzR2lybCsrOwogICAgICAgICAgICAgICAgaWYgKHBhaXJbMS1jXS5mZW1hbGUpIHsKICAgICAgICAgICAgICAgICAgICBib3RoR2lybHMrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigicmFuZG9tIGlzIGdpcmwgJTdkJW4iLCByYW5kb21Jc0dpcmwpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJib3RoIGdpcmxzICAgICAlN2QlbiIsIGJvdGhHaXJscyk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoImNoYW5jZSAgICAgICAgICU5LjJmJSUlbiIsKDEwMGYgKiBib3RoR2lybHMpIC8gcmFuZG9tSXNHaXJsKTsKICAgIH0KICAgIAp9