mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-24 05:21:09 +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
|
* Arrays
|
||||||
* [Permutations](data_structures/arrays/permutations.py)
|
* [Permutations](data_structures/arrays/permutations.py)
|
||||||
* [Prefix Sum](data_structures/arrays/prefix_sum.py)
|
* [Prefix Sum](data_structures/arrays/prefix_sum.py)
|
||||||
|
* [Product Sum Array](data_structures/arrays/product_sum.py)
|
||||||
* Binary Tree
|
* Binary Tree
|
||||||
* [Avl Tree](data_structures/binary_tree/avl_tree.py)
|
* [Avl Tree](data_structures/binary_tree/avl_tree.py)
|
||||||
* [Basic Binary Tree](data_structures/binary_tree/basic_binary_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