Mercurial > repos > rliterman > csp2
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fun/Chance.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,49 @@ +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); + } + +}