Mercurial > repos > rliterman > csp2
annotate 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 |
rev | line source |
---|---|
jpayne@68 | 1 package fun; |
jpayne@68 | 2 |
jpayne@68 | 3 import java.util.Locale; |
jpayne@68 | 4 import java.util.Random; |
jpayne@68 | 5 |
jpayne@68 | 6 import shared.Parse; |
jpayne@68 | 7 import shared.Shared; |
jpayne@68 | 8 |
jpayne@68 | 9 public class Chance { |
jpayne@68 | 10 |
jpayne@68 | 11 //Probability of something with a chance of X happening at least Y times in Z chances |
jpayne@68 | 12 public static void main(String[] args){ |
jpayne@68 | 13 |
jpayne@68 | 14 int draws; |
jpayne@68 | 15 int minSuccess; |
jpayne@68 | 16 float prob; |
jpayne@68 | 17 long rounds; |
jpayne@68 | 18 try { |
jpayne@68 | 19 draws = Parse.parseIntKMG(args[0]); |
jpayne@68 | 20 minSuccess = Parse.parseIntKMG(args[1]); |
jpayne@68 | 21 prob = Float.parseFloat(args[2]); |
jpayne@68 | 22 rounds = Parse.parseKMG(args[3]); |
jpayne@68 | 23 } catch (Exception e) { |
jpayne@68 | 24 System.err.println("Chance (int)draws (int)minSuccess (float)prob (int)rounds"); |
jpayne@68 | 25 System.exit(1); |
jpayne@68 | 26 throw new RuntimeException(); |
jpayne@68 | 27 } |
jpayne@68 | 28 |
jpayne@68 | 29 Random randy=Shared.threadLocalRandom(); |
jpayne@68 | 30 |
jpayne@68 | 31 long passes=0; |
jpayne@68 | 32 for(long i=0; i<rounds; i++){ |
jpayne@68 | 33 int pass=runOneRound(randy, draws, minSuccess, prob); |
jpayne@68 | 34 passes+=pass; |
jpayne@68 | 35 } |
jpayne@68 | 36 |
jpayne@68 | 37 double odds=passes*1.0/rounds; |
jpayne@68 | 38 System.err.println("Probability: "+String.format(Locale.ROOT, "%.6f%%", 100*odds)); |
jpayne@68 | 39 } |
jpayne@68 | 40 |
jpayne@68 | 41 private static int runOneRound(Random randy, int draws, int minSuccess, float prob) { |
jpayne@68 | 42 int success=0; |
jpayne@68 | 43 for(int i=0; i<draws && success<minSuccess; i++){ |
jpayne@68 | 44 if(randy.nextFloat()<=prob){success++;} |
jpayne@68 | 45 } |
jpayne@68 | 46 return (success>=minSuccess ? 1 : 0); |
jpayne@68 | 47 } |
jpayne@68 | 48 |
jpayne@68 | 49 } |