X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=cipher%2Faffine.py;h=9c521b94e2385bc4292c1519a3b8a75c7be9263e;hb=eb9d341079d637d3af35c03b6fc02bfd0768bd43;hp=6ba90e6d1e4976f4d40f7024fc5f1bc10647b17f;hpb=311b300d197536622980f7a837294d8245e326b4;p=cipher-tools.git diff --git a/cipher/affine.py b/cipher/affine.py index 6ba90e6..9c521b9 100644 --- a/cipher/affine.py +++ b/cipher/affine.py @@ -1,15 +1,21 @@ -from utilities import * -from language_models import * +from support.utilities import * +from support.language_models import * from logger import logger -modular_division_table = [[0]*26 for _ in range(26)] -for a in range(26): - for b in range(26): - c = (a * b) % 26 - modular_division_table[b][c] = a +# modular_division_table = [[0]*26 for _ in range(26)] +# for a in range(26): +# for b in range(26): +# c = (a * b) % 26 +# modular_division_table[b][c] = a +modular_division_table = { + (multiplier, (multiplier * plaintext) % 26): plaintext + for plaintext in range(26) + for multiplier in range(26) + } + def affine_encipher_letter(accented_letter, multiplier=1, adder=0, one_based=True): @@ -75,9 +81,12 @@ def affine_decipher_letter(letter, multiplier=1, adder=0, one_based=True): if letter in string.ascii_letters: cipher_number = pos(letter) if one_based: cipher_number += 1 + # plaintext_number = ( + # modular_division_table[multiplier] + # [(cipher_number - adder) % 26]) plaintext_number = ( - modular_division_table[multiplier] - [(cipher_number - adder) % 26]) + modular_division_table[multiplier, (cipher_number - adder) % 26] + ) if one_based: plaintext_number -= 1 if letter in string.ascii_uppercase: return unpos(plaintext_number).upper()