diff options
| author | pok <pok@ailouros.nemeses.net> | 2025-08-29 02:41:45 +0700 |
|---|---|---|
| committer | pok <pok@ailouros> | 2025-08-29 02:59:49 +0700 |
| commit | 3b39a8db5139ec52eeb12c212368a706cc61b34a (patch) | |
| tree | f8feac26babe8140aa3c9673538b5edfb955a79a | |
| parent | c78205bb18ba5a004a3b4f58953d70a35e05c9cc (diff) | |
| download | perlweeklychallenge-club-3b39a8db5139ec52eeb12c212368a706cc61b34a.tar.gz perlweeklychallenge-club-3b39a8db5139ec52eeb12c212368a706cc61b34a.tar.bz2 perlweeklychallenge-club-3b39a8db5139ec52eeb12c212368a706cc61b34a.zip | |
pwc336 solution in python
| -rw-r--r-- | challenge-336/pokgopun/python/ch-1.py | 87 | ||||
| -rw-r--r-- | challenge-336/pokgopun/python/ch-2.py | 134 |
2 files changed, 221 insertions, 0 deletions
diff --git a/challenge-336/pokgopun/python/ch-1.py b/challenge-336/pokgopun/python/ch-1.py new file mode 100644 index 0000000000..660fa75b2e --- /dev/null +++ b/challenge-336/pokgopun/python/ch-1.py @@ -0,0 +1,87 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-336/ +""" + +Task 1: Equal Group + +Submitted by: [42]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given an array of integers. + + Write a script to return true if the given array can be divided into + one or more groups: each group must be of the same size as the others, + with at least two members, and with all members having the same value. + +Example 1 + +Input: @ints = (1,1,2,2,2,2) +Output: true + +Groups: (1,1), (2,2), (2,2) + +Example 2 + +Input: @ints = (1,1,1,2,2,2,3,3) +Output: false + +Groups: (1,1,1), (2,2,2), (3,3) + +Example 3 + +Input: @ints = (5,5,5,5,5,5,7,7,7,7,7,7) +Output: true + +Groups: (5,5,5,5,5,5), (7,7,7,7,7,7) + +Example 4 + +Input: @ints = (1,2,3,4) +Output: false + +Example 5 + +Input: @ints = (8,8,9,9,10,10,11,11) +Output: true + +Groups: (8,8), (9,9), (10,10), (11,11) + +Task 2: Final Score +""" +### solution by pokgopun@gmail.com + +def eg(ints: tuple[int]) -> bool: + l = len(ints) + if l < 2: + return False + ints = sorted(ints) + for d in range(2,l+1): + if l % d != 0: + continue + #print("d=",d) + for i in range(d,l+1,d): + #print(ints[i-d:i]) + if len(set(ints[i-d:i])) != 1: + break + else: + return True + return False + +import unittest + +class TetEg(unittest.TestCase): + def test(self): + for inpt, otpt in { + (1,1,2,2,2,2): True, + (1,1,1,2,2,2,3,3): False, + (5,5,5,5,5,5,7,7,7,7,7,7): True, + (1,2,3,4): False, + (8,8,9,9,10,10,11,11): True, + (1,1): True, + (1,1,1,2,2,2,3,3,3): True, + (1,1,1,1,1,1,3,3,3): True, + (1,1,1,3,3,3,3,3,3): True, + }.items(): + #print(inpt) + self.assertEqual(eg(inpt),otpt) + +unittest.main() diff --git a/challenge-336/pokgopun/python/ch-2.py b/challenge-336/pokgopun/python/ch-2.py new file mode 100644 index 0000000000..829c4a9fa5 --- /dev/null +++ b/challenge-336/pokgopun/python/ch-2.py @@ -0,0 +1,134 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-336/ +""" + +Task 2: Final Score + +Submitted by: [43]Mohammad Sajid Anwar + __________________________________________________________________ + + You are given an array of scores by a team. + + Write a script to find the total score of the given team. The score can + be any integer, +, C or D. The + adds the sum of previous two scores. + The score C invalidates the previous score. The score D will double the + previous score. + +Example 1 + +Input: @scores = ("5","2","C","D","+") +Output: 30 + +Round 1: 5 +Round 2: 5 + 2 +Round 3: 5 (invalidate the previous score 2) +Round 4: 5 + 10 (double the previous score 5) +Round 5: 5 + 10 + 15 (sum of previous two scores) + +Total Scores: 30 + +Example 2 + +Input: @scores = ("5","-2","4","C","D","9","+","+") +Output: 27 + +Round 1: 5 +Round 2: 5 + (-2) +Round 3: 5 + (-2) + 4 +Round 4: 5 + (-2) (invalidate the previous score 4) +Round 5: 5 + (-2) + (-4) (double the previous score -2) +Round 6: 5 + (-2) + (-4) + 9 +Round 7: 5 + (-2) + (-4) + 9 + 5 (sum of previous two scores) +Round 8: 5 + (-2) + (-4) + 9 + 5 + 14 (sum of previous two scores) + +Total Scores: 27 + +Example 3 + +Input: @scores = ("7","D","D","C","+","3") +Output: 45 + +Round 1: 7 +Round 2: 7 + 14 (double the previous score 7) +Round 3: 7 + 14 + 28 (double the previous score 14) +Round 4: 7 + 14 (invalidate the previous score 28) +Round 5: 7 + 14 + 21 (sum of previous two scores) +Round 6: 7 + 14 + 21 + 3 + +Total Scores: 45 + +Example 4 + +Input: @scores = ("-5","-10","+","D","C","+") +Output: -55 + +Round 1: (-5) +Round 2: (-5) + (-10) +Round 3: (-5) + (-10) + (-15) (sum of previous two scores) +Round 4: (-5) + (-10) + (-15) + (-30) (double the previous score -15) +Round 5: (-5) + (-10) + (-15) (invalidate the previous score -30) +Round 6: (-5) + (-10) + (-15) + (-25) (sum of previous two scores) + +Total Scores: -55 + +Example 5 + +Input: @scores = ("3","6","+","D","C","8","+","D","-2","C","+") +Output: 128 + +Round 1: 3 +Round 2: 3 + 6 +Round 3: 3 + 6 + 9 (sum of previous two scores) +Round 4: 3 + 6 + 9 + 18 (double the previous score 9) +Round 5: 3 + 6 + 9 (invalidate the previous score 18) +Round 6: 3 + 6 + 9 + 8 +Round 7: 3 + 6 + 9 + 8 + 17 (sum of previous two scores) +Round 8: 3 + 6 + 9 + 8 + 17 + 34 (double the previous score 17) +Round 9: 3 + 6 + 9 + 8 + 17 + 34 + (-2) +Round 10: 3 + 6 + 9 + 8 + 17 + 34 (invalidate the previous score -2) +Round 11: 3 + 6 + 9 + 8 + 17 + 34 + 51 (sum of previous two scores) + +Total Scores: 128 + __________________________________________________________________ + + Last date to submit the solution 23:59 (UK Time) Sunday 31st August + 2025. + __________________________________________________________________ + +SO WHAT DO YOU THINK ? +""" +### solution by pokgopun@gmail.com + +def fc(scores: tuple[str]) -> int: + scores = list(scores) + l = len(scores) + i = 0 + while i < l: + match scores[i]: + case '+': + scores[i] = sum(scores[max(0,i-2):i]) + case 'C': + scores = scores[:i-1] + scores[i+1:] + i -= 1 + l -= 2 + continue + case 'D': + scores[i] = 2 * scores[i-1] + case _: + scores[i] = int(scores[i]) + i += 1 + return sum(scores) + +import unittest + +class TestFc(unittest.TestCase): + def test(self): + for inpt, otpt in { + ("5","2","C","D","+"): 30, + ("5","-2","4","C","D","9","+","+"): 27, + ("7","D","D","C","+","3"): 45, + ("-5","-10","+","D","C","+"): -55, + ("3","6","+","D","C","8","+","D","-2","C","+"): 128, + }.items(): + self.assertEqual(fc(inpt),otpt) + +unittest.main() |
