mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
Algorithm: Calculating Product Sum from a Special Array with Nested Structures (#8761)
* Added minimum waiting time problem solution using greedy algorithm * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * ruff --fix * Add type hints * Added two more doc test * Removed unnecessary comments * updated type hints * Updated the code as per the code review * Added recursive algo to calculate product sum from an array * Added recursive algo to calculate product sum from an array * Update doc string * Added doctest for product_sum function * Updated the code and added more doctests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Added more test coverage for product_sum method * Update product_sum.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
f54a966810
commit
331585f3f8
|
@ -166,6 +166,7 @@
|
|||
* Arrays
|
||||
* [Permutations](data_structures/arrays/permutations.py)
|
||||
* [Prefix Sum](data_structures/arrays/prefix_sum.py)
|
||||
* [Product Sum Array](data_structures/arrays/product_sum.py)
|
||||
* Binary Tree
|
||||
* [Avl Tree](data_structures/binary_tree/avl_tree.py)
|
||||
* [Basic Binary Tree](data_structures/binary_tree/basic_binary_tree.py)
|
||||
|
|
98
data_structures/arrays/product_sum.py
Normal file
98
data_structures/arrays/product_sum.py
Normal file
|
@ -0,0 +1,98 @@
|
|||
"""
|
||||
Calculate the Product Sum from a Special Array.
|
||||
reference: https://dev.to/sfrasica/algorithms-product-sum-from-an-array-dc6
|
||||
|
||||
Python doctests can be run with the following command:
|
||||
python -m doctest -v product_sum.py
|
||||
|
||||
Calculate the product sum of a "special" array which can contain integers or nested
|
||||
arrays. The product sum is obtained by adding all elements and multiplying by their
|
||||
respective depths.
|
||||
|
||||
For example, in the array [x, y], the product sum is (x + y). In the array [x, [y, z]],
|
||||
the product sum is x + 2 * (y + z). In the array [x, [y, [z]]],
|
||||
the product sum is x + 2 * (y + 3z).
|
||||
|
||||
Example Input:
|
||||
[5, 2, [-7, 1], 3, [6, [-13, 8], 4]]
|
||||
Output: 12
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def product_sum(arr: list[int | list], depth: int) -> int:
|
||||
"""
|
||||
Recursively calculates the product sum of an array.
|
||||
|
||||
The product sum of an array is defined as the sum of its elements multiplied by
|
||||
their respective depths. If an element is a list, its product sum is calculated
|
||||
recursively by multiplying the sum of its elements with its depth plus one.
|
||||
|
||||
Args:
|
||||
arr: The array of integers and nested lists.
|
||||
depth: The current depth level.
|
||||
|
||||
Returns:
|
||||
int: The product sum of the array.
|
||||
|
||||
Examples:
|
||||
>>> product_sum([1, 2, 3], 1)
|
||||
6
|
||||
>>> product_sum([-1, 2, [-3, 4]], 2)
|
||||
8
|
||||
>>> product_sum([1, 2, 3], -1)
|
||||
-6
|
||||
>>> product_sum([1, 2, 3], 0)
|
||||
0
|
||||
>>> product_sum([1, 2, 3], 7)
|
||||
42
|
||||
>>> product_sum((1, 2, 3), 7)
|
||||
42
|
||||
>>> product_sum({1, 2, 3}, 7)
|
||||
42
|
||||
>>> product_sum([1, -1], 1)
|
||||
0
|
||||
>>> product_sum([1, -2], 1)
|
||||
-1
|
||||
>>> product_sum([-3.5, [1, [0.5]]], 1)
|
||||
1.5
|
||||
|
||||
"""
|
||||
total_sum = 0
|
||||
for ele in arr:
|
||||
total_sum += product_sum(ele, depth + 1) if isinstance(ele, list) else ele
|
||||
return total_sum * depth
|
||||
|
||||
|
||||
def product_sum_array(array: list[int | list]) -> int:
|
||||
"""
|
||||
Calculates the product sum of an array.
|
||||
|
||||
Args:
|
||||
array (List[Union[int, List]]): The array of integers and nested lists.
|
||||
|
||||
Returns:
|
||||
int: The product sum of the array.
|
||||
|
||||
Examples:
|
||||
>>> product_sum_array([1, 2, 3])
|
||||
6
|
||||
>>> product_sum_array([1, [2, 3]])
|
||||
11
|
||||
>>> product_sum_array([1, [2, [3, 4]]])
|
||||
47
|
||||
>>> product_sum_array([0])
|
||||
0
|
||||
>>> product_sum_array([-3.5, [1, [0.5]]])
|
||||
1.5
|
||||
>>> product_sum_array([1, -2])
|
||||
-1
|
||||
|
||||
"""
|
||||
return product_sum(array, 1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user