# Solution - Task 1

EventSimulatorunknown

java

6 months ago

2.3 kB

1

Indexable

Never

^{}

import java.util.HashMap; import java.util.Random; class EventSimulator { //this simulator method has logic to select among key inputs in main method , and their likely chances to occur in totalOccurrences. // the simulator method uses a random number to select an outcome based on their probabilities. It iterates through the 'hm' map, // accumulating the probabilities until it finds an outcome whose cumulative probability comes nearer to the generated random number. // main thing to note that event occurrence is totally 'biased' on hashmap input value (that is probability of event provided in input) , // higher the number higher the chances of occurring private static Object simulator(HashMap<Object, Integer> hm) { int randomNumber = new Random().nextInt(100); int growingProbability = 0; for (HashMap.Entry<Object, Integer> inputProbabilities : hm.entrySet()) { growingProbability = growingProbability + inputProbabilities.getValue(); if (randomNumber <= growingProbability) { return inputProbabilities.getKey(); } } throw new RuntimeException ("400 Bad Request"); } public static void main(String[] args) { // hard coded outcomes and their probabilities HashMap<Object, Integer> hm = new HashMap<>(); hm.put(1,10); hm.put(2,30); hm.put(3,15); hm.put(4,15); hm.put(5,30); hm.put(6,0); //uncomment this and comment above dice probability to check for coin occurrence // hm.put("head",35); // hm.put("tail",65); // int totalOccurrences = 1000; HashMap<Object, Integer> occurrenceCount = new HashMap<>(); for (int i = 0; i < totalOccurrences; i++) { Object obj = simulator(hm); Integer count = occurrenceCount.get(obj); if (count == null) { occurrenceCount.put(obj, 1); } else { occurrenceCount.put(obj, count + 1); } } //print occurrences for (HashMap.Entry<Object, Integer> entry : occurrenceCount.entrySet()) { System.out.println("Chances to occur " +entry.getKey() + " is " +entry.getValue() + " times."); } } }