24 lines
573 B
Text
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)
|