Skip to content

Instantly share code, notes, and snippets.

@TuHuynhVan
Last active November 17, 2022 20:51
Show Gist options
  • Save TuHuynhVan/5a22cd63330f81f4ad4545ee46352839 to your computer and use it in GitHub Desktop.
Save TuHuynhVan/5a22cd63330f81f4ad4545ee46352839 to your computer and use it in GitHub Desktop.
// This code is for Java 7
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.security.*;
public class Solution {
public static Map<String, Integer> fruitBasket;
static {
fruitBasket = new HashMap<>();
fruitBasket.put("apple", 3);
fruitBasket.put("banana", 1);
fruitBasket.put("orange", 2);
}
public static String fruitPicker(Map<String, Integer> fruitBasket) {
Set<String> keys = fruitBasket.keySet();
List<String> allFruiteNames = new ArrayList<>();
for(String fruitName : keys){
int fruitQuantity = fruitBasket.get(fruitName);
for(int i = 0; i < fruitQuantity; i++){
allFruiteNames.add(fruitName);
}
}
int randomIndex = new SecureRandom().nextInt(allFruiteNames.size());
String randomFruit = allFruiteNames.get(randomIndex);
return randomFruit;
}
public static void testFruitPicker(Map<String, Integer> fruitBasket, int runTime){
final float acceptedDiff = 0.5f;
Map<String, Integer> selectedTable = new HashMap<>();
}
public static void main(String[] args) {
// How many time to run: runTime
// How many time the fruitHappend: selectedTime(3)
// How many percentage for this lottery: thatFruitQuantity(3) / totalFruit(6) = expectedPercentage
// Expectation: (selectedTime/runTime) ~= expectedPercentage (+/- some percentage)
// banana for example
// 10 runs, fruit happened 1; expected would be 1.6
// selected / run = .1 >= .16666
// +/- 5%
// Used for testing.
final float acceptedDiff = 0.5f;
Map<String, Integer> selectedTable = new HashMap<>();
// Put the frequency of selection
int runTime = 1000;
for (int i = 0; i < runTime; i++) {
String randomFruit = fruitPicker(fruitBasket);
if(selectedTable.containsKey(randomFruit)){
selectedTable.put(randomFruit, selectedTable.get(randomFruit) + 1);
} else {
selectedTable.put(randomFruit, 1);
}
}
// Calculate fruit quantity from the basket
int totalFruit = 0;
for(String fruit : fruitBasket.keySet()){
totalFruit += fruitBasket.get(fruit);
}
// Verification
for(String fruitName : selectedTable.keySet()){
float expectedPercentage = fruitBasket.get(fruitName) / totalFruit ;
int selectedTime = selectedTable.get(fruitName);
float happenedPercentage = selectedTime / runTime ;
boolean isAllowPercentage = Math.abs(expectedPercentage - happenedPercentage) <= acceptedDiff;
System.out.println(fruitName + ": " + isAllowPercentage);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment