# HackerRank Day 4: Binomial Distribution II | 10 Days of Statistics problem solution

In this Hackerrank Day 4: Binomial Distribution II 10 Days of Statistics problem A manufacturer of metal pistons finds that, on average, 12% of the pistons they manufacture are rejected because they are incorrectly sized. What is the probability that a batch of 10 pistons will contain:

1. No more than 2 rejects?
2. At least 2 rejects?

## Problem solution in Python programming.

```# Enter your code here. Read input from STDIN. Print output to STDOUT
def fact(n):
return 1 if n == 0 else n*fact(n-1)

def comb(n, x):
return fact(n) / (fact(x) * fact(n-x))

def b(x, n, p):
return comb(n, x) * p**x * (1-p)**(n-x)

p, n = list(map(int, input().split(" ")))
print(round(sum([b(i, n, p/100) for i in range(3)]), 3))
print(round(sum([b(i, n, p/100) for i in range(2, n+1)]), 3))```

## Problem solution in Java Programming.

```import java.io.*;
import java.util.*;

public class Solution {

private static int fact(int n) {
if(n <= 1) {
return 1;
} else {
return n * fact(n-1);
}
}

private static double bio(double a, double b, int end, int n) {
double sum = 0;
for(int i = 0;i <= end;i++) {
int m = fact(n) / (fact(n-i) * fact(i));
sum += Math.pow(a, n-i) * Math.pow(b, i) * m;
}
return sum;
}

public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner scan = new Scanner(System.in);
double percent = scan.nextInt() / 100.0;
double pistons = scan.nextInt() / 100.0;

System.out.println(String.format("%.3f", bio(1-percent, percent, 2, 10)));
System.out.println(String.format("%.3f", bio(percent, 1-percent, 8, 10)));
}
}```

## Problem solution in C++ programming.

```#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
long long int gt(int a){
if (a<=1){
return 1;
}
else{
return a*gt(a-1);
}
}
long long int th(int a,int b){
return gt(a)/(gt(b)*gt(a-b));
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
double a,b;
cin >> a >> b;
double p=a/100;
double r1,r2;
r1=th(b,0)*pow(p,0)*pow(1-p,b-0)+th(b,1)*pow(p,1)*pow(1-p,b-1)+th(b,2)*pow(p,2)*pow(1-p,b-2);
r2=1-(th(b,0)*pow(p,0)*pow(1-p,b-0)+th(b,1)*pow(p,1)*pow(1-p,b-1));
cout.precision(3);
cout << r1 << endl;
cout << r2;
return 0;
}```

## Problem solution in C programming.

```#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

double binomial(int x, int n, double p) {
double q = 1.0 - p;
int comb = 1;
int end = n - x;
int i;
for (i=n; i>end; i--) {
comb = comb * i;
}
for (i=x; i>0; i--) {
comb = comb / i;
}
// printf("x=%d, n=%d, comb=%d, p^x=%f, q^(n-x)=%f ", x, n, comb, pow(p,x), pow(q,n-x));
// printf("res=%f\n", comb * pow(p,x) * pow(q,n-x));
return (comb * pow(p,x) * pow(q,n-x));
}

int main() {

/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int reject_percent, batch_size;
double p; // success probability
double prejle2, prejge2;
int i;

scanf("%d %d", &reject_percent, &batch_size);
p = 1 - (reject_percent/100.0);
// printf("sucess prob p=%f\n", p);

// no more than 2 rejects
for (i = 0, prejle2 = 0.0; i <= 2; i++) {
prejle2 += binomial(batch_size - i, batch_size, p);
}
printf("%.3f\n", prejle2);

// at least 2 rejects
for (i = 2, prejge2 = 0.0; i <= batch_size; i++) {
prejge2 += binomial(batch_size - i, batch_size, p);
}
printf("%.3f\n", prejge2);

return 0;
}```

## Problem solution in JavaScript programming.

```function factorial (n) {
var total = 1;
for (i=1; i<=n; i++) {
total = total * i;
}
}

function a_sobre_b(a,b) {
return factorial(a)/(factorial(b) * factorial(a-b));
}

function processData(input) {
var suma_props = 0;
for (var i=0; i<=2; i++) {
suma_props += a_sobre_b(10,i)*Math.pow(0.12,i)*Math.pow(0.88,10-i);
}
console.log(suma_props.toFixed(3));
suma_props = 0;
for (var i=0; i<=1; i++) {
suma_props += a_sobre_b(10,i)*Math.pow(0.12,i)*Math.pow(0.88,10-i);
}
console.log((1-suma_props).toFixed(3));
}

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
_input += input;
});

process.stdin.on("end", function () {
processData(_input);
});```