[0, 1, 2, 3] function( attrChoices1, attrChoices2 ) { att1 = randFromArray( attrChoices1 ); att2 = randFromArray( attrChoices2 ); return [ att1, att2, att1 + " or " + att2, att1 + " and " + att2 ]; } randFromArray([ ["A local store ran a sale on two items, a watch and a shirt. There were ", ["customers who bought a watch", "customers who bought a shirt", "customers who bought a watch or a shirt", "customers who bought a watch and a shirt"], "What was the number of ", "?", false], ["A study group at a nearby high school has ", ["sophomores", "girls", "students who are a sophomore or a girl", "sophomore girls"], "How many ", " are there in the study group?", false], ["In a sample of patients, ", CHOOSE_ATTRIBUTES( ["male", "female"], ["colorblind", "overweight", "underweight", "over sixty", "healthy", "under eighteen", "healthy"] ), "What percentage of the patients are ", "?", true], ["Of the houses in a town, ", CHOOSE_ATTRIBUTES( ["white", "blue", "light green", "solar powered", "near a park"], ["air conditioned", "wooden", "stucco"] ), "What percentage of the houses are ", "?", true], ["A census was recently taken in a certain community, and the results include the following facts about the residents: ", CHOOSE_ATTRIBUTES( ["Hispanic", "Asian", "White", "Black"], ["male", "female", "under 18", "over 65"] ), "What percentage of the residents are ", "?", true], ["A car dealer advertises statistics desribing her inventory. Of the cars on her lot, the advertisement states ", CHOOSE_ATTRIBUTES( ["white", "blue", "light green", "red", "grey", "black"], ["trucks", "minivans", "SUVs", "sports cars", "sedans"] ), "What percentage of the cars are ", "?", true] ]) shuffle( [0, 1, 2, 3] ) ( function( usePercentages ) { var rangemin = usePercentages ? 1 : 2; var rangemax = usePercentages ? 100 : 10; var vals = [0, 0, 0, 0]; vals[VARINDX_X] = randRange( rangemin, rangemax ); vals[VARINDX_Y] = randRange( rangemin, rangemax ); vals[VARINDX_X_AND_Y] = randRange( max( rangemin, vals[VARINDX_X]+vals[VARINDX_Y]-100 ), min( vals[VARINDX_X], vals[VARINDX_Y] ) ); vals[VARINDX_X_OR_Y] = vals[VARINDX_X] + vals[VARINDX_Y] - vals[VARINDX_X_AND_Y]; return vals; } )( USEPERCENTAGES ) ( function() { var optionalPercentage = USEPERCENTAGES ? "% are " : " "; var qstn = INTRO; for (var i=0; i < ORDER.length-1; i++) { qstn += (i===ORDER.length-2) ? " and " : ""; qstn += VARVALS[ORDER[i]] + optionalPercentage + VARDESC[ORDER[i]]; qstn += (i < ORDER.length-2) ? ", " : ". "; } qstn += QSTNPRETEXT + VARDESC[ORDER[ORDER.length-1]] + QSTNPOSTTEXT; return qstn; } )() function (innerString) { return enFunc(innerString, USEPERCENTAGES); }

QUESTIONTEXT

VARVALS[ORDER[ORDER.length-1]]

Remember the addition rule of probability: P(A\cup B) = P(A) + P(B) - P(A\cap B)

Because the denominator of the fraction for each probability is the same, for convenience we can also just use cardinality (the number of items in each category) instead of probability: |A\cup B| = |A|+ |B| - |A\cap B|

Substituting variables, ENFUNC(VARDESC[2]) = ENFUNC(VARDESC[0]) + ENFUNC(VARDESC[1]) - ENFUNC(VARDESC[3])

Rearranging, ENFUNC(VARDESC[0]) = ENFUNC(VARDESC[3]) + ENFUNC(VARDESC[2]) - ENFUNC(VARDESC[1])

Rearranging, ENFUNC(VARDESC[1]) = ENFUNC(VARDESC[3]) + ENFUNC(VARDESC[2]) - ENFUNC(VARDESC[0])

Rearranging, ENFUNC(VARDESC[3]) = ENFUNC(VARDESC[0]) + ENFUNC(VARDESC[1]) - ENFUNC(VARDESC[2])

ENFUNC(VARDESC[0]) = VARVALS[3] + VARVALS[2] - VARVALS[1]

ENFUNC(VARDESC[1]) = VARVALS[3] + VARVALS[2] - VARVALS[0]

ENFUNC(VARDESC[2]) = VARVALS[0] + VARVALS[1] - VARVALS[3]

ENFUNC(VARDESC[3]) = VARVALS[0] + VARVALS[1] - VARVALS[2]

ENFUNC(VARDESC[0]) = VARVALS[3] + VARVALS[2] - VARVALS[1]

ENFUNC(VARDESC[1]) = VARVALS[3] + VARVALS[2] - VARVALS[0]

ENFUNC(VARDESC[2]) = VARVALS[0] + VARVALS[1] - VARVALS[3]

ENFUNC(VARDESC[3]) = VARVALS[0] + VARVALS[1] - VARVALS[2]