From 7eba1dcbef81558e69755e523294b8a72ef88318 Mon Sep 17 00:00:00 2001 From: Sanders Lin <45224617+SandersLin@users.noreply.github.com> Date: Thu, 16 Apr 2020 16:42:59 +0800 Subject: [PATCH 1/8] Create sol2.py --- project_euler/problem_31/sol2.py | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 project_euler/problem_31/sol2.py diff --git a/project_euler/problem_31/sol2.py b/project_euler/problem_31/sol2.py new file mode 100644 index 000000000000..9f96782dc72f --- /dev/null +++ b/project_euler/problem_31/sol2.py @@ -0,0 +1,38 @@ +""" +Coin sums +Problem 31 +In England the currency is made up of pound, £, and pence, p, and there are +eight coins in general circulation: + +1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p). +It is possible to make £2 in the following way: + +1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p +How many different ways can £2 be made using any number of coins? +""" + + +def solution(pence): + """Returns the number of different ways to make X pence using any number of coins. solution is + based on dynamic programming paradigm in bottom up fashion. + + >>> solution(500) + 6295434 + >>> solution(200) + 73682 + >>> solution(50) + 451 + >>> solution(10) + 11 + """ + coins = [1, 2, 5, 10, 20, 50, 100, 200] + number_of_ways = [0] * (pence + 1) + number_of_ways[0] = 1 # base case: 1 way to make 0 pence + for i in range(len(coins)): + for j in range(coins[i], pence + 1, 1): + number_of_ways[j] += number_of_ways[j - coins[i]] + return number_of_ways[pence] + + +if __name__ == "__main__": + assert solution(200) == 73682 From dfb6bef9e29d84ed29cbc94a9147e9bc4a646ce3 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 16 Apr 2020 08:43:12 +0000 Subject: [PATCH 2/8] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f7363d7e9ab..734d21d32c9f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -499,6 +499,7 @@ * [Soln](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_30/soln.py) * Problem 31 * [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol1.py) + * [Sol2](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol2.py) * Problem 32 * [Sol32](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_32/sol32.py) * Problem 33 From 23ce85ebd8d348202da02db8aec47a9f38bfc200 Mon Sep 17 00:00:00 2001 From: vinayak Date: Sat, 2 May 2020 18:49:46 +0530 Subject: [PATCH 3/8] Update DIRECTORY.md --- DIRECTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 734d21d32c9f..0f7363d7e9ab 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -499,7 +499,6 @@ * [Soln](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_30/soln.py) * Problem 31 * [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol1.py) - * [Sol2](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol2.py) * Problem 32 * [Sol32](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_32/sol32.py) * Problem 33 From 186bc2eafcf6809d08a112d106cdfc165997e070 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 2 May 2020 13:20:08 +0000 Subject: [PATCH 4/8] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f7363d7e9ab..734d21d32c9f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -499,6 +499,7 @@ * [Soln](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_30/soln.py) * Problem 31 * [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol1.py) + * [Sol2](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol2.py) * Problem 32 * [Sol32](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_32/sol32.py) * Problem 33 From 86a5525f72e4ca5bc533bbf499d153ee25db82a5 Mon Sep 17 00:00:00 2001 From: vinayak Date: Sat, 2 May 2020 19:09:19 +0530 Subject: [PATCH 5/8] Update sol2.py --- project_euler/problem_31/sol2.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/project_euler/problem_31/sol2.py b/project_euler/problem_31/sol2.py index 9f96782dc72f..b934ec492ba8 100644 --- a/project_euler/problem_31/sol2.py +++ b/project_euler/problem_31/sol2.py @@ -1,6 +1,7 @@ """ + Coin sums -Problem 31 + In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation: @@ -9,10 +10,28 @@ 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p How many different ways can £2 be made using any number of coins? + +Hint: + > There are 100 pence in a pound (£1 = 100p) + > There are coins(in pence) are available: 1, 2, 5, 10, 20, 50, 100 and 200. + > how many different ways you can combine these values to create 200 pence. + +Example: + to make 6p there are 5 ways + 1,1,1,1,1,1 + 1,1,1,1,2 + 1,1,2,2 + 2,2,2 + 1,5 + to make 5p there are 4 ways + 1,1,1,1,1 + 1,1,1,2 + 1,2,2 + 5 """ -def solution(pence): +def solution(pence: int) -> int: """Returns the number of different ways to make X pence using any number of coins. solution is based on dynamic programming paradigm in bottom up fashion. @@ -28,9 +47,10 @@ def solution(pence): coins = [1, 2, 5, 10, 20, 50, 100, 200] number_of_ways = [0] * (pence + 1) number_of_ways[0] = 1 # base case: 1 way to make 0 pence - for i in range(len(coins)): - for j in range(coins[i], pence + 1, 1): - number_of_ways[j] += number_of_ways[j - coins[i]] + + for coin in coins: + for i in range(coin, pence + 1, 1): + number_of_ways[i] += number_of_ways[i - coin] return number_of_ways[pence] From 4e799023759575be055e583ecb1497403358cc50 Mon Sep 17 00:00:00 2001 From: vinayak Date: Sat, 2 May 2020 19:10:27 +0530 Subject: [PATCH 6/8] Update DIRECTORY.md --- DIRECTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 734d21d32c9f..0f7363d7e9ab 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -499,7 +499,6 @@ * [Soln](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_30/soln.py) * Problem 31 * [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol1.py) - * [Sol2](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol2.py) * Problem 32 * [Sol32](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_32/sol32.py) * Problem 33 From c1440729def1e82e14671faa7ff4eca54593fc80 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 2 May 2020 13:40:49 +0000 Subject: [PATCH 7/8] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f7363d7e9ab..734d21d32c9f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -499,6 +499,7 @@ * [Soln](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_30/soln.py) * Problem 31 * [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol1.py) + * [Sol2](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_31/sol2.py) * Problem 32 * [Sol32](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_32/sol32.py) * Problem 33 From 541a5e0ac350f7cc15d0bb79b008d92b919a09bb Mon Sep 17 00:00:00 2001 From: John Law Date: Tue, 5 May 2020 17:25:59 +0200 Subject: [PATCH 8/8] Improve docstrings --- project_euler/problem_31/sol2.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/project_euler/problem_31/sol2.py b/project_euler/problem_31/sol2.py index b934ec492ba8..1f006f1a1824 100644 --- a/project_euler/problem_31/sol2.py +++ b/project_euler/problem_31/sol2.py @@ -1,6 +1,4 @@ -""" - -Coin sums +"""Coin sums In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation: @@ -32,8 +30,8 @@ def solution(pence: int) -> int: - """Returns the number of different ways to make X pence using any number of coins. solution is - based on dynamic programming paradigm in bottom up fashion. + """Returns the number of different ways to make X pence using any number of coins. + The solution is based on dynamic programming paradigm in a bottom-up fashion. >>> solution(500) 6295434