diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-09-17 12:54:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-17 12:54:07 +0100 |
| commit | 7eab363c30f0bb0fb5f4a656af08a5e4678f04be (patch) | |
| tree | 32ca95b2bfab3e5fa86fd23b54be10883a282da4 /challenge-287/roger-bell-west/python | |
| parent | adf98a527d178b4ae8bf8fc8098fbc49bb0ffdd0 (diff) | |
| parent | c65277c75b4f825c13da82040273b63915ed4a74 (diff) | |
| download | perlweeklychallenge-club-7eab363c30f0bb0fb5f4a656af08a5e4678f04be.tar.gz perlweeklychallenge-club-7eab363c30f0bb0fb5f4a656af08a5e4678f04be.tar.bz2 perlweeklychallenge-club-7eab363c30f0bb0fb5f4a656af08a5e4678f04be.zip | |
Merge pull request #10858 from Firedrake/rogerbw-challenge-287
RogerBW solutions for challenge no. 287
Diffstat (limited to 'challenge-287/roger-bell-west/python')
| -rwxr-xr-x | challenge-287/roger-bell-west/python/ch-1.py | 59 | ||||
| -rwxr-xr-x | challenge-287/roger-bell-west/python/ch-2.py | 40 |
2 files changed, 99 insertions, 0 deletions
diff --git a/challenge-287/roger-bell-west/python/ch-1.py b/challenge-287/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..c387ae56fc --- /dev/null +++ b/challenge-287/roger-bell-west/python/ch-1.py @@ -0,0 +1,59 @@ +#! /usr/bin/python3 + +from collections import defaultdict + +def strongpassword(a): + ctypes = defaultdict(lambda: 0) + reps = 0 + rep = 0 + old = '@' + changes = [] + for i, c in enumerate(a): + if i > 0 and c == old: + rep += 1 + if rep >= 2: + reps += 1 + else: + rep = 0 + old = c + t = 'n' + if c.isupper(): + t = 'u' + elif c.islower(): + t = 'l' + elif c.isdigit(): + t = 'd' + ctypes[t] += 1 + changes.append(reps) + if 'n' in ctypes: + del ctypes['n'] + k = len(ctypes.keys()) + if k < 3: + spare = sum(ctypes.values()) - k + if spare < 0: + changes.append(-spare) + if len(a) < 6: + changes.append(6 - len(a)) + return max(changes) + + +import unittest + +class TestStrongpassword(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(strongpassword("a"), 5, 'example 1') + + def test_ex2(self): + self.assertEqual(strongpassword("aB2"), 3, 'example 2') + + def test_ex3(self): + self.assertEqual(strongpassword("PaaSW0rd"), 0, 'example 3') + + def test_ex4(self): + self.assertEqual(strongpassword("Paaasw0rd"), 1, 'example 4') + + def test_ex5(self): + self.assertEqual(strongpassword("aaaaa"), 3, 'example 5') + +unittest.main() diff --git a/challenge-287/roger-bell-west/python/ch-2.py b/challenge-287/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..7197f9b4f3 --- /dev/null +++ b/challenge-287/roger-bell-west/python/ch-2.py @@ -0,0 +1,40 @@ +#! /usr/bin/python3 + +import re + +def validnumber(a): + integer = r"[-+]?[0-9]+"; + float = r"[-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)"; + exponential = "(" + integer + "|" + float + ")[Ee]" + integer; + number = "^(" + integer + "|" + float + "|" +exponential + ")$"; + rx = re.compile(number) + if re.match(rx, a): + return True + return False + +import unittest + +class TestValidnumber(unittest.TestCase): + + def test_ex1(self): + self.assertEqual(validnumber("1"), True, 'example 1') + + def test_ex2(self): + self.assertEqual(validnumber("a"), False, 'example 2') + + def test_ex3(self): + self.assertEqual(validnumber("."), False, 'example 3') + + def test_ex4(self): + self.assertEqual(validnumber("1.2e4.2"), False, 'example 4') + + def test_ex5(self): + self.assertEqual(validnumber("-1."), True, 'example 5') + + def test_ex6(self): + self.assertEqual(validnumber("+1E-8"), True, 'example 6') + + def test_ex7(self): + self.assertEqual(validnumber(".44"), True, 'example 7') + +unittest.main() |
