diff options
| -rw-r--r-- | challenge-306/pokgopun/python/ch-1.py | 66 | ||||
| -rw-r--r-- | challenge-306/pokgopun/python/ch-2.py | 78 |
2 files changed, 144 insertions, 0 deletions
diff --git a/challenge-306/pokgopun/python/ch-1.py b/challenge-306/pokgopun/python/ch-1.py new file mode 100644 index 0000000000..545c866cd8 --- /dev/null +++ b/challenge-306/pokgopun/python/ch-1.py @@ -0,0 +1,66 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-306/ +""" + +Task 1: Odd Sum + +Submitted by: [42]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given an array of positive integers, @ints. + + Write a script to return the sum of all possible odd-length subarrays + of the given array. A subarray is a contiguous subsequence of the + array. + +Example 1 + +Input: @ints = (2, 5, 3, 6, 4) +Output: 77 + +Odd length sub-arrays: +(2) => 2 +(5) => 5 +(3) => 3 +(6) => 6 +(4) => 4 +(2, 5, 3) => 10 +(5, 3, 6) => 14 +(3, 6, 4) => 13 +(2, 5, 3, 6, 4) => 20 + +Sum => 2 + 5 + 3 + 6 + 4 + 10 + 14 + 13 + 20 => 77 + +Example 2 + +Input: @ints = (1, 3) +Output: 4 + +Task 2: Last Element +""" +### solution by pokgopun@gmail.com + +from typing import Tuple + +def odsm(ints: Tuple[int])-> int: + sm = 0 + l = len(ints) + for o in range(1, l+1, 2): + i = 0 + while i + o <= l: + sm += sum(ints[i:i+o]) + i += 1 + return sm + +import unittest + +class TestOdsm(unittest.TestCase): + def test(self): + for inpt, otpt in { + (2, 5, 3, 6, 4): 77, + (1, 3): 4, + }.items(): + self.assertEqual(odsm(inpt),otpt) + +unittest.main() + + diff --git a/challenge-306/pokgopun/python/ch-2.py b/challenge-306/pokgopun/python/ch-2.py new file mode 100644 index 0000000000..74c73117de --- /dev/null +++ b/challenge-306/pokgopun/python/ch-2.py @@ -0,0 +1,78 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-306/ +""" + +Task 2: Last Element + +Submitted by: [43]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given a array of integers, @ints. + + Write a script to play a game where you pick two biggest integers in + the given array, say x and y. Then do the following: +a) if x == y then remove both from the given array +b) if x != y then remove x and replace y with (y - x) + + At the end of the game, there is at most one element left. + + Return the last element if found otherwise return 0. + +Example 1 + +Input: @ints = (3, 8, 5, 2, 9, 2) +Output: 1 + +Step 1: pick 8 and 9 => (3, 5, 2, 1, 2) +Step 2: pick 3 and 5 => (2, 2, 1, 2) +Step 3: pick 2 and 1 => (1, 2, 2) +Step 4: pick 2 and 1 => (1, 2) +Step 5: pick 1 and 2 => (1) + +Example 2 + +Input: @ints = (3, 2, 5) +Output: 0 + +Step 1: pick 3 and 5 => (2, 2) +Step 2: pick 2 and 2 => () + __________________________________________________________________ + + Last date to submit the solution 23:59 (UK Time) Sunday 2^nd January + 2025. + __________________________________________________________________ + +SO WHAT DO YOU THINK ? +""" +### solution by pokgopun@gmail.com + +from typing import Tuple + +def lstelm(ints: Tuple[int]) -> int: + lst = list(ints) + while True: + l = len(lst) + if l == 0: + return 0 + if l == 1: + return lst[0] + lst.sort() + d = lst[-2] - lst[-1] + if d == 0: + lst = lst[:-2] + continue + if d < 0: + d *= -1 + lst[-2] = d + lst = lst[:-1] + +import unittest + +class TestLstelm(unittest.TestCase): + def test(self): + for inpt, otpt in { + (3, 8, 5, 2, 9, 2): 1, + (3, 2, 5): 0, + }.items(): + self.assertEqual(lstelm(inpt), otpt) + +unittest.main() |
