31 lines
1.1 KiB
AppleScript
31 lines
1.1 KiB
AppleScript
-- All input values must be integers and multiples of the same monetary unit.
|
|
on countCoins(amount, denominations)
|
|
-- Potentially long list of counters, initialised with 1 (result for amount 0) and 'amount' zeros.
|
|
script o
|
|
property counters : {1}
|
|
end script
|
|
repeat amount times
|
|
set end of o's counters to 0
|
|
end repeat
|
|
|
|
-- Less labour-intensive alternative to the following repeat's c = 1 iteration.
|
|
set coinValue to beginning of denominations
|
|
repeat with n from (coinValue + 1) to (amount + 1) by coinValue
|
|
set item n of o's counters to 1
|
|
end repeat
|
|
|
|
repeat with c from 2 to (count denominations)
|
|
set coinValue to item c of denominations
|
|
repeat with n from (coinValue + 1) to (amount + 1)
|
|
set item n of o's counters to (item n of o's counters) + (item (n - coinValue) of o's counters)
|
|
end repeat
|
|
end repeat
|
|
|
|
return end of o's counters
|
|
end countCoins
|
|
|
|
-- Task calls:
|
|
set c1 to countCoins(100, {25, 10, 5, 1})
|
|
set c2 to countCoins(1000 * 100, {100, 50, 25, 10, 5, 1})
|
|
return {c1, c2}
|