aboutsummaryrefslogtreecommitdiff
path: root/challenge-287/roger-bell-west/python
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-287/roger-bell-west/python')
-rwxr-xr-xchallenge-287/roger-bell-west/python/ch-1.py59
-rwxr-xr-xchallenge-287/roger-bell-west/python/ch-2.py40
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()