aboutsummaryrefslogtreecommitdiff
path: root/challenge-190/sgreen/python
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-190/sgreen/python')
-rwxr-xr-xchallenge-190/sgreen/python/ch-1.py14
-rwxr-xr-xchallenge-190/sgreen/python/ch-2.py45
2 files changed, 59 insertions, 0 deletions
diff --git a/challenge-190/sgreen/python/ch-1.py b/challenge-190/sgreen/python/ch-1.py
new file mode 100755
index 0000000000..54bfc62908
--- /dev/null
+++ b/challenge-190/sgreen/python/ch-1.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+
+import re
+import sys
+
+
+def main(s):
+ # See if the string is all one case, or starts with a capital and then
+ # lower case letters.
+ print(1 if re.search('^[A-Z]?([A-Z]+|[a-z]+)$', s) else 0)
+
+
+if __name__ == '__main__':
+ main(sys.argv[1])
diff --git a/challenge-190/sgreen/python/ch-2.py b/challenge-190/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..02835441b3
--- /dev/null
+++ b/challenge-190/sgreen/python/ch-2.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+import string
+import sys
+
+
+def main(s):
+ '''Main function'''
+
+ # Loop through the alphabet
+ letter_map = {}
+ for k, v in enumerate(string.ascii_uppercase):
+ letter_map[str(k+1)] = v
+
+ # Record completed solutions
+ solutions = []
+
+ # Start with the input string
+ stack = [(s, '')]
+
+ while stack:
+ (numbers, letters) = stack.pop(0)
+
+ if numbers == '':
+ # If we have no numbers for this stack, it is a solution
+ solutions.append(letters)
+ else:
+ # Consider either the first single or two numbers
+ for l in (1, 2):
+ if len(numbers) >= l and numbers[:l] in letter_map:
+ # If we have a mapping, add to the stack list with the
+ # remaining numbers, and appending this letter to the
+ # letters
+ stack.append(
+ (numbers[l:], letters + letter_map[numbers[:l]]))
+
+ # Print the solutions
+ if solutions:
+ print(*sorted(solutions), sep=', ')
+ else:
+ print('No solution possible')
+
+
+if __name__ == '__main__':
+ main(sys.argv[1])