From 1bb06dee9fb5ecc53ea38af68bf053cc35e7b1be Mon Sep 17 00:00:00 2001
From: Neil Smith <neil.git@njae.me.uk>
Date: Mon, 18 Nov 2013 15:17:46 +0000
Subject: [PATCH] Used a list comprehension in transpositions_of, refactored
 column transposition en-/de- cipher

---
 cipher.py | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/cipher.py b/cipher.py
index 7d3ba78..40e771f 100644
--- a/cipher.py
+++ b/cipher.py
@@ -424,10 +424,8 @@ def transpositions_of(keyword):
     >>> transpositions_of('clever')
     [0, 2, 1, 4, 3]
     """
-    transpositions = []
     key = deduplicate(keyword)
-    for l in sorted(key):
-        transpositions += [key.index(l)]
+    transpositions = [key.index(l) for l in sorted(key)]
     return transpositions
 
 def column_transposition_encipher(message, keyword):
@@ -435,19 +433,30 @@ def column_transposition_encipher(message, keyword):
     >>> column_transposition_encipher('hellothere', 'clever')
     'hleolteher'
     """
-    transpositions = transpositions_of(keyword)
-    columns = every_nth(message, len(transpositions), fillvalue=' ')
-    transposed_columns = transpose(columns, transpositions)
-    return combine_every_nth(transposed_columns)
+    return column_transposition_worker(message, keyword, True)
 
 def column_transposition_decipher(message, keyword):
     """
     >>> column_transposition_decipher('hleolteher', 'clever')
     'hellothere'
     """
+    return column_transposition_worker(message, keyword, False)
+
+def column_transposition_worker(message, keyword, encipher=True):
+    """
+    >>> column_transposition_worker('hellothere', 'clever')
+    'hleolteher'
+    >>> column_transposition_worker('hellothere', 'clever', True)
+    'hleolteher'
+    >>> column_transposition_worker('hleolteher', 'clever', False)
+    'hellothere'
+    """
     transpositions = transpositions_of(keyword)
     columns = every_nth(message, len(transpositions), fillvalue=' ')
-    transposed_columns = untranspose(columns, transpositions)
+    if encipher:
+        transposed_columns = transpose(columns, transpositions)
+    else:
+        transposed_columns = untranspose(columns, transpositions)
     return combine_every_nth(transposed_columns)
 
 
-- 
2.43.0