From 98b832f1ff2919defd3e4fa528b60362a6caf0fc Mon Sep 17 00:00:00 2001 From: Michael Firkins Date: Mon, 2 Oct 2023 21:05:31 +1100 Subject: pwc237 solution in python --- challenge-237/pokgopun/python/ch-1.py | 55 +++++++++++++++++++++++++++++++ challenge-237/pokgopun/python/ch-2.py | 62 +++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 challenge-237/pokgopun/python/ch-1.py create mode 100644 challenge-237/pokgopun/python/ch-2.py diff --git a/challenge-237/pokgopun/python/ch-1.py b/challenge-237/pokgopun/python/ch-1.py new file mode 100644 index 0000000000..e04ed8c727 --- /dev/null +++ b/challenge-237/pokgopun/python/ch-1.py @@ -0,0 +1,55 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-237/ +""" + +Task 1: Seize The Day + +Submitted by: [44]Mark Anderson + __________________________________________________________________ + + Given a year, a month, a weekday of month, and a day of week (1 (Mon) + .. 7 (Sun)), print the day. + +Example 1 + +Input: Year = 2024, Month = 4, Weekday of month = 3, day of week = 2 +Output: 16 + +The 3rd Tue of Apr 2024 is the 16th + +Example 2 + +Input: Year = 2025, Month = 10, Weekday of month = 2, day of week = 4 +Output: 9 + +The 2nd Thu of Oct 2025 is the 9th + +Example 3 + +Input: Year = 2026, Month = 8, Weekday of month = 5, day of week = 3 +Output: 0 + +There isn't a 5th Wed in Aug 2026 + +Task 2: Maximise Greatness +""" +### solution by pokgopun@gmail.com + +import datetime + +def seizeTheDay(tup): + y,m,mw,wd = tup + dt = datetime.date(y, m, 1) + wdd = wd - dt.isoweekday() + if wdd < 0: wdd += 7 + try: + return dt.replace(day = 1 + 7*(mw - 1) + wdd).day + except: + return 0 + +for inpt,otpt in { + (2024,4,3,2): 16, + (2025,10,2,4): 9, + (2026,8,5,3): 0, + }.items(): + print(seizeTheDay(inpt)==otpt) + diff --git a/challenge-237/pokgopun/python/ch-2.py b/challenge-237/pokgopun/python/ch-2.py new file mode 100644 index 0000000000..7f52133712 --- /dev/null +++ b/challenge-237/pokgopun/python/ch-2.py @@ -0,0 +1,62 @@ +### https://theweeklychallenge.org/blog/perl-weekly-challenge-237/ +""" + +Task 2: Maximise Greatness + +Submitted by: [45]Mohammad S Anwar + __________________________________________________________________ + + You are given an array of integers. + + Write a script to permute the give array such that you get the maximum + possible greatness. + + To determine greatness, nums[i] < perm[i] where 0 <= i < nums.length + +Example 1 + +Input: @nums = (1, 3, 5, 2, 1, 3, 1) +Output: 4 + +One possible permutation: (2, 5, 1, 3, 3, 1, 1) which returns 4 greatness as bel +ow: +nums[0] < perm[0] +nums[1] < perm[1] +nums[3] < perm[3] +nums[4] < perm[4] + +Example 2 + +Input: @ints = (1, 2, 3, 4) +Output: 3 + +One possible permutation: (2, 3, 4, 1) which returns 3 greatness as below: +nums[0] < perm[0] +nums[1] < perm[1] +nums[2] < perm[2] + __________________________________________________________________ + + Last date to submit the solution 23:59 (UK Time) Sunday 8th October + 2023. + __________________________________________________________________ + +SO WHAT DO YOU THINK ? +""" +### solution by pokgopun@gmail.com + +from itertools import permutations + +def maxGreat(tup): + l, m = len(tup), 0 + for pm in permutations(tup): + g = tuple( pm[i] > tup[i] for i in range(l) ).count(True) + if m < g : m = g + return m + +for inpt,otpt in { + (1, 3, 5, 2, 1, 3, 1): 4, + (1, 2, 3, 4): 3, + }.items(): + print(maxGreat(inpt)==otpt) + + -- cgit