aboutsummaryrefslogtreecommitdiff
path: root/challenge-190/sgreen/python/ch-2.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-190/sgreen/python/ch-2.py')
-rwxr-xr-xchallenge-190/sgreen/python/ch-2.py45
1 files changed, 45 insertions, 0 deletions
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])