summaryrefslogtreecommitdiff
path: root/coins2.py
blob: 9fe2577ddffd3cd57c40d79dca60569ffe282042 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

QUARTER = 0.25
DIME = 0.10
NICKEL = 0.05
PENNY = 0.01

def num_coins(total, coin):
    if total < coin:
        return 0

    remainder = round(total % coin, 2)
    return round((total - remainder) / coin)

def reduce(total, coin, number_of_coins):
    return round(total - (number_of_coins * coin), 2)

def calculate(total, coins = [QUARTER, DIME, NICKEL, PENNY]):
    result = [0, 0, 0, 0]

    for i, coin in enumerate(coins):
        count = num_coins(total, coin)
        total = reduce(total, coin, count)
        result[i] = count

    return result

def receipt(total):
    coins = calculate(total)
    return f"quarters:{coins[0]}; dimes:{coins[1]}; nickels:{coins[2]}; pennies:{coins[3]}"

assert [76, 1, 1, 0] == calculate(19.15)
assert [0, 0, 0, 0] == calculate(0.00)
assert [0, 0, 0, 1] == calculate(0.01)
assert [0, 0, 1, 0] == calculate(0.05)
assert [0, 0, 1, 1] == calculate(0.06)
assert [0, 1, 0, 0] == calculate(0.10)
assert [0, 1, 0, 1] == calculate(0.11)
assert [0, 1, 1, 1] == calculate(0.16)
assert [1, 0, 0, 0] == calculate(0.25)
assert [1, 0, 0, 1] == calculate(0.26)
assert [1, 0, 1, 1] == calculate(0.31)
assert [1, 1, 1, 1] == calculate(0.41)
assert [3, 1, 1, 4] == calculate(0.94)
assert [4, 0, 0, 1] == calculate(1.01)
assert [5, 0, 1, 1] == calculate(1.31)


assert "quarters:0; dimes:1; nickels:0; pennies:0" == receipt(0.10)
assert "quarters:1; dimes:0; nickels:0; pennies:0" == receipt(0.25)
assert "quarters:1; dimes:1; nickels:1; pennies:1" == receipt(0.41)
assert "quarters:3; dimes:1; nickels:1; pennies:4" == receipt(0.94)
assert "quarters:5; dimes:0; nickels:1; pennies:1" == receipt(1.31)
assert "quarters:76; dimes:1; nickels:1; pennies:0" == receipt(19.15)

print("All tests are passing!")