Source : https://www.hackerrank.com/challenges/s10-the-central-limit-theorem-1
Objective
In this challenge, we practice solving problems based on the Central Limit Theorem. Check out the Tutorial tab for learning materials!
Task
A large elevator can transport a maximum of pounds. Suppose a load of cargo containing boxes must be transported via the elevator. The box weight of this type of cargo follows a distribution with a mean of pounds and a standard deviation of pounds. Based on this information, what is the probability that all boxes can be safely loaded into the freight elevator and transported?
Input Format
There are lines of input (shown below):
98004920515
The first line contains the maximum weight the elevator can transport. The second line contains the number of boxes in the cargo. The third line contains the mean weight of a cargo box, and the fourth line contains its standard deviation.
If you do not wish to read this information from stdin, you can hard-code it into your program.
Output Format
Print the probability that the elevator can successfully transport all boxes, rounded to a scale of decimal places (i.e., format).
Source : https://www.hackerrank.com/challenges/s10-the-central-limit-theorem-1
Solution
// github.com/RodneyShag | |
public class Solution { | |
public static void main(String[] args) { | |
double mean = 205; | |
double std = 15; | |
double maxWeight = 9800; | |
int n = 49; | |
/* Formulas are from problem's tutorial */ | |
double samplesMean = n * mean; | |
double samplesSTD = Math.sqrt(n) * std; | |
System.out.format("%.4f", cumulative(samplesMean, samplesSTD, maxWeight)); | |
} | |
/* Calculates cumulative probability */ | |
public static double cumulative(double mean, double std, double x) { | |
double parameter = (x - mean) / (std * Math.sqrt(2)); | |
return (0.5) * (1 + erf(parameter)); | |
} | |
/* Source: http://introcs.cs.princeton.edu/java/21function/ErrorFunction.java.html */ | |
// fractional error in math formula less than 1.2 * 10 ^ -7. | |
// although subject to catastrophic cancellation when z in very close to 0 | |
// from Chebyshev fitting formula for erf(z) from Numerical Recipes, 6.2 | |
public static double erf(double z) { | |
double t = 1.0 / (1.0 + 0.5 * Math.abs(z)); | |
// use Horner's method | |
double ans = 1 - t * Math.exp( -z*z - 1.26551223 + | |
t * ( 1.00002368 + | |
t * ( 0.37409196 + | |
t * ( 0.09678418 + | |
t * (-0.18628806 + | |
t * ( 0.27886807 + | |
t * (-1.13520398 + | |
t * ( 1.48851587 + | |
t * (-0.82215223 + | |
t * ( 0.17087277)))))))))); | |
if (z >= 0) return ans; | |
else return -ans; | |
} | |
} |
No comments:
Post a Comment