Mercurial > repos > rliterman > csp2
view CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fun/Chance.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line source
package fun; import java.util.Locale; import java.util.Random; import shared.Parse; import shared.Shared; public class Chance { //Probability of something with a chance of X happening at least Y times in Z chances public static void main(String[] args){ int draws; int minSuccess; float prob; long rounds; try { draws = Parse.parseIntKMG(args[0]); minSuccess = Parse.parseIntKMG(args[1]); prob = Float.parseFloat(args[2]); rounds = Parse.parseKMG(args[3]); } catch (Exception e) { System.err.println("Chance (int)draws (int)minSuccess (float)prob (int)rounds"); System.exit(1); throw new RuntimeException(); } Random randy=Shared.threadLocalRandom(); long passes=0; for(long i=0; i<rounds; i++){ int pass=runOneRound(randy, draws, minSuccess, prob); passes+=pass; } double odds=passes*1.0/rounds; System.err.println("Probability: "+String.format(Locale.ROOT, "%.6f%%", 100*odds)); } private static int runOneRound(Random randy, int draws, int minSuccess, float prob) { int success=0; for(int i=0; i<draws && success<minSuccess; i++){ if(randy.nextFloat()<=prob){success++;} } return (success>=minSuccess ? 1 : 0); } }