class CwCardUtils::SynergyProbability
def prob_two_card_combo(names, draws)
def prob_two_card_combo(names, draws) draws_clamped = clamp_draws(draws) copies_a = copies_by_name[names[0]] copies_b = copies_by_name[names[1]] total = hypergeometric(@deck_size, draws_clamped).to_f # Probability missing A miss_a = hypergeometric(@deck_size - copies_a, draws_clamped) / total # Probability missing B miss_b = hypergeometric(@deck_size - copies_b, draws_clamped) / total # Probability missing both miss_both = hypergeometric(@deck_size - (copies_a + copies_b), draws_clamped) / total # Inclusion–exclusion prob = 1 - (miss_a + miss_b - miss_both) prob.clamp(0.0, 1.0) end