Task

(Given an equal-probability generator of one of the integers 1 to 5
as dice5),   create dice7 that generates a pseudo-random integer from
1 to 7 in equal probability using only dice5 as a source of random
numbers,   and check the distribution for at least one million calls using the function created in   Simple Random Distribution Checker.


Implementation suggestion:
dice7 might call dice5 twice, re-call if four of the 25
combinations are given, otherwise split the other 21 combinations
into 7 groups of three, and return the group index from the rolls.

(Task adapted from an answer here)

 
-module( dice ).
 
-export( [dice5/0, dice7/0, task/0] ).
 
dice5() -> random:uniform( 5 ).
 
dice7() ->
	dice7_small_enough( dice5() * 5 + dice5() - 6 ). % 0 - 24
 
task() ->
       verify_distribution_uniformity:naive( fun dice7/0, 1000000, 1 ).
 
 
 
dice7_small_enough( N ) when N < 21 -> N div 3 + 1;
dice7_small_enough( _N ) -> dice7().
 