RosettaCodeData/Task/Count-the-coins/Elixir/count-the-coins.elixir
2023-07-01 13:44:08 -04:00

24 lines
573 B
Text

defmodule Coins do
def find(coins,lim) do
vals = Map.new(0..lim,&{&1,0}) |> Map.put(0,1)
count(coins,lim,vals)
|> Map.values
|> 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
defp ad(a,b,c), do: Map.put(c,b,c[b]+c[b-a])
end
Coins.find([1,5,10,25],100)
Coins.find([1,5,10,25,50,100],100_000)