+"""[Railfence transposition cipher](https://en.wikipedia.org/wiki/Rail_fence_cipher).
+
+Works by splitting the text into sections, then reading across them to
+generate the rows in the cipher. The rows are then combined to form the
+ciphertext.
+
+Example: the plaintext "hellotherefriends", with a height of four, written
+out in the railfence as
+ h h i
+ etere*
+ lorfns
+ l e d
+(with the * showing the one character to finish the last section).
+Each 'section' is two columns, but unfolded. In the example, the first
+section is 'hellot'.
+"""
import math
from enum import Enum
from itertools import starmap, zip_longest
return cat(c for r in zip_longest(*(down_rows + up_rows), fillvalue='') for c in r)
-def railfence_break(message, max_key_length=20,
- fitness=Pletters, chunksize=500):
- """Breaks a railfence cipher using a matrix of given rank and letter frequencies
-
-
- """
-
- sanitised_message = sanitise(message)
- results = starmap(worker, [(sanitised_message, i, fitness)
- for i in range(2, max_key_length+1)])
- return max(results, key=lambda k: k[1])
-
-
def railfence_break(message, max_key_length=20,
fitness=Pbigrams, chunksize=500):
"""Breaks a railfence cipher using a range of lengths and