aboutsummaryrefslogtreecommitdiff
path: root/challenge-192/vamsi-meenavilli/python/ch-2.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-192/vamsi-meenavilli/python/ch-2.py')
-rw-r--r--challenge-192/vamsi-meenavilli/python/ch-2.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/challenge-192/vamsi-meenavilli/python/ch-2.py b/challenge-192/vamsi-meenavilli/python/ch-2.py
new file mode 100644
index 0000000000..9f8676f293
--- /dev/null
+++ b/challenge-192/vamsi-meenavilli/python/ch-2.py
@@ -0,0 +1,61 @@
+"""
+Week 192:
+
+https://theweeklychallenge.org/blog/perl-weekly-challenge-192
+
+Task 1: Equal Distribution
+Submitted by: Mohammad S Anwar
+You are given a list of integers greater than or equal to zero, @list.
+
+Write a script to distribute the number so that each members are same. If you succeed then print the total moves otherwise print -1.
+
+Please follow the rules (as suggested by Neils van Dijke [2022-11-21 13:00]
+
+1) You can only move a value of '1' per move
+2) You are only allowed to move a value of '1' to a direct neighbor/adjacent cell
+"""
+
+
+def equalDistributionMoves(numbers_list: list) -> int:
+ numbers_list_size = len(numbers_list)
+ moves = 0
+
+ if sum(numbers_list) % numbers_list_size == 0:
+ while len(set(numbers_list)) != 1:
+ max_number_index = getMaxNumberIndex(numbers_list)
+ before_max_number_index = max_number_index - 1
+ after_max_number_index = max_number_index + 1
+
+ if after_max_number_index >= numbers_list_size or numbers_list[before_max_number_index] <= numbers_list[
+ after_max_number_index]:
+ numbers_list[before_max_number_index] += 1
+ else:
+ numbers_list[after_max_number_index] += 1
+
+ numbers_list[max_number_index] -= 1
+ moves += 1
+ else:
+ moves = -1
+
+ return moves
+
+
+def getMaxNumberIndex(numbers_list: list) -> int:
+ max_number = 0
+ max_number_index = 0
+
+ for index, number in enumerate(numbers_list):
+ if number > max_number:
+ max_number = number
+ max_number_index = index
+
+ return max_number_index
+
+
+def equalDistributionMovesTest() -> None:
+ assert equalDistributionMoves([1, 0, 5]) == 4, 'Example 1 Failed'
+ assert equalDistributionMoves([0, 2, 0]) == -1, 'Example 2 Failed'
+ assert equalDistributionMoves([0, 3, 0]) == 2, 'Example 3 Failed'
+
+
+equalDistributionMovesTest()