RosettaCodeData/Task/Count-the-coins/Elixir/count-the-coins.elixir

25 lines
573 B
Text
Raw Permalink Normal View History

2015-11-18 06:14:39 +00:00
defmodule Coins do
def find(coins,lim) do
2017-09-23 10:01:46 +02:00
vals = Map.new(0..lim,&{&1,0}) |> Map.put(0,1)
2015-11-18 06:14:39 +00:00
count(coins,lim,vals)
2016-12-05 22:15:40 +01:00
|> Map.values
2015-11-18 06:14:39 +00:00
|> Enum.max
|> IO.inspect
end
defp count([],_,vals), do: vals
defp count([coin|coins],lim,vals) do
count(coins,lim,ways(coin,coin,lim,vals))
end
defp ways(num,_coin,lim,vals) when num > lim, do: vals
defp ways(num, coin,lim,vals) do
ways(num+1,coin,lim,ad(coin,num,vals))
end
2016-12-05 22:15:40 +01:00
defp ad(a,b,c), do: Map.put(c,b,c[b]+c[b-a])
2015-11-18 06:14:39 +00:00
end
Coins.find([1,5,10,25],100)
Coins.find([1,5,10,25,50,100],100_000)