X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=column_transposition.py;h=a141ff2c1f8fcc263a43884f307bfdb3f8003d8a;hb=3d8f7067b9c3a48ef140d7cff834d18ee91f58b3;hp=ecef3319f1594b0bf37253909a45b35e6068ab96;hpb=21c390a77d42729afa23844ef2f1295106bed3de;p=cipher-tools.git diff --git a/column_transposition.py b/column_transposition.py index ecef331..a141ff2 100644 --- a/column_transposition.py +++ b/column_transposition.py @@ -1,6 +1,7 @@ from utilities import * from language_models import * -from multiprocessing import Pool +import multiprocessing +from itertools import chain from logger import logger @@ -26,6 +27,12 @@ def transpositions_of(keyword): transpositions = tuple(key.index(l) for l in sorted(key)) return transpositions + +transpositions = collections.defaultdict(list) +for word in keywords: + transpositions[transpositions_of(word)] += [word] + + def pad(message_len, group_len, fillvalue): padding_length = group_len - message_len % group_len if padding_length == group_len: padding_length = 0 @@ -197,7 +204,7 @@ def column_transposition_break_mp(message, translist=transpositions, fitness=Ptrigrams) # doctest: +ELLIPSIS (((2, 0, 5, 3, 1, 4, 6), False, False), -997.0129085...) """ - with Pool() as pool: + with multiprocessing.Pool() as pool: helper_args = [(message, trans, fillcolumnwise, emptycolumnwise, fitness) for trans in translist @@ -260,3 +267,5 @@ def scytale_break_mp(message, max_key_length=20, return math.trunc(len(message) / len(best[0][0])), best[1] scytale_break = scytale_break_mp +if __name__ == "__main__": + import doctest \ No newline at end of file