From 8c709f314b9ff11568342684891c466aab170bdd Mon Sep 17 00:00:00 2001 From: Mohammad Sajid Anwar Date: Tue, 17 Sep 2024 10:23:54 +0100 Subject: - Added solutions by PokGoPun. - Added solutions by Eric Cheung. - Added solutions by Conor Hoekstra. --- challenge-287/eric-cheung/python/ch-1.py | 58 ++++++++++++++++++++++++++++++++ challenge-287/eric-cheung/python/ch-2.py | 45 +++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100755 challenge-287/eric-cheung/python/ch-1.py create mode 100755 challenge-287/eric-cheung/python/ch-2.py diff --git a/challenge-287/eric-cheung/python/ch-1.py b/challenge-287/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..63e1bc3931 --- /dev/null +++ b/challenge-287/eric-cheung/python/ch-1.py @@ -0,0 +1,58 @@ + +## strInput = "a" ## Example 1 +## strInput = "aB2" ## Example 2 +## strInput = "PaaSW0rd" ## Example 3 +## strInput = "Paaasw0rd" ## Example 4 +strInput = "aaaaa" ## Example 5 + +nDupChar = 3 + +nLenCharAdd = (0 if len(strInput) >= 6 else 6 - len(strInput)) + +nLenUpperAdd = (0 if any(strLoop.isupper() for strLoop in strInput) else 1) +nLenLowerAdd = (0 if any(strLoop.islower() for strLoop in strInput) else 1) +nIsNumericAdd = (0 if any(strLoop.isnumeric() for strLoop in strInput) else 1) + +nCharSumAdd = sum([nLenUpperAdd, nLenLowerAdd, nIsNumericAdd]) + +## == +arrList = list(strInput) +arrUniqList = set(arrList) +arrDupList = [charLoop for charLoop in set(arrList) if arrList.count(charLoop) >= 3] + +arrCheckList = [] +arrSubCheckList = [] +arrCheckIndx = [] +for nIndx, charLoop in enumerate(arrList): + if charLoop not in arrDupList: + continue + + if len(arrSubCheckList) == 0: + arrSubCheckList.append([charLoop, [nIndx]]) + elif arrSubCheckList[-1][0] == charLoop and nIndx - arrSubCheckList[-1][1][-1] == 1: + arrSubCheckList[-1][1].append(nIndx) + else: + arrCheckList = arrCheckList + arrSubCheckList + arrSubCheckList = [] + arrSubCheckList.append([charLoop, [nIndx]]) + +if len(arrSubCheckList) > 0: + arrCheckList = arrCheckList + arrSubCheckList + arrSubCheckList = [] + +for arrLoop in arrCheckList: + if len(arrLoop[1]) < nDupChar: + continue + + for nSubIndx in range(nDupChar - 1, len(arrLoop[1]), nDupChar): + arrCheckIndx.append(nSubIndx) + +nLenChange = len(arrCheckIndx) +## == + +nTemp = (nCharSumAdd - nLenCharAdd if nCharSumAdd >= nLenCharAdd else 0) +nTemp = (nTemp - nLenChange if nTemp >= nLenChange else 0) + +nTotalSteps = nLenCharAdd + nLenChange + nTemp + +print (nTotalSteps) diff --git a/challenge-287/eric-cheung/python/ch-2.py b/challenge-287/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..ede897bb14 --- /dev/null +++ b/challenge-287/eric-cheung/python/ch-2.py @@ -0,0 +1,45 @@ + +def IsValidDef (strFunc, bAllowDecimal): + if not bAllowDecimal and "." in strFunc: + return False + + if strFunc == ".": + return False + + if (strFunc[0] in ["+", "-"]): + strFunc = strFunc[1:] + + arrPart = strFunc.split(".") + + if len(arrPart) > 2: + return False + + for strLoop in arrPart: + if not strLoop: + continue + if not strLoop.isnumeric(): + return False + + return True + +def IsValidNum (strFunc): + arrPart = strFunc.lower().split("e") + + if len(arrPart) > 2: + return False + + for nIndx, strLoop in enumerate(arrPart): + if not IsValidDef (strLoop, nIndx == 0): + return False + + return True + +## strInput = "1" ## Example 1 +## strInput = "a" ## Example 2 +## strInput = "." ## Example 3 +## strInput = "1.2e4.2" ## Example 4 +## strInput = "-1." ## Example 5 +## strInput = "+1E-8" ## Example 6 +strInput = ".44" ## Example 7 + +print (IsValidNum(strInput)) -- cgit