Last active
November 17, 2022 20:51
-
-
Save TuHuynhVan/5a22cd63330f81f4ad4545ee46352839 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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