Verify distribution uniformity/Naive: Difference between revisions

→‎{{header|Elixir}}: change Dict(deprecated) -> Map
m (→‎{{header|REXX}}: added highlighting.)
(→‎{{header|Elixir}}: change Dict(deprecated) -> Map)
Line 366:
{{trans|Erlang}}
<lang elixir>defmodule VerifyDistribution do
def naive( generator, times, delta_percent \\ 3 ) do
dict = Enum.reduce( List.duplicate(generator, times), Map.new, fn f,d -> &update_counter(f,d) end/2 )
values = for x <- DictMap.keysvalues(dict), do: Dict.get(dict, x)
average = Enum.sum( values ) / Dict.sizemap_size( dict )
delta = average * (delta_percent / 100)
fun = fn {_key, value} -> abs(value - average) > delta end
too_large_dict = Enum.filter( dict, fun )
return( Dict.sizelength(too_large_dict), too_large_dict, average, delta_percent )
end
def return( 0, _too_large_dict, _average, _delta ), do: :ok
def return( _n, too_large_dict, average, delta ) do
{:error, {Dict.to_list(too_large_dict), :failed_expected_average, average, 'with_delta_%', delta}}
end
def update_counter( fun, dict ), do: DictMap.update( dict, fun.(), 1, fn&(val) -> val&1+1 end) )
end
 
:random.seed(:erlang.now)
fun = fn -> Dice.dice7 end
IO.inspect VerifyDistribution.naive( fun, 100000, 3 )
Anonymous user