Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Creative category for Vigenere Cipher by aquazul
def decode_vigenere(old_decrypted, old_encrypted, new_encrypted):
rawkey = [(ord(de) - ord(en)) % 26
for de, en in zip(old_decrypted, old_encrypted)]
for i in range(1, len(rawkey)+1):
can = rawkey[:i]
if all(s == can[j%len(can)] for j, s in enumerate(rawkey)):
key = can
break
return "".join(chr((ord(x) - 65 + key[i%len(key)]) % 26 + 65)
for i, x in enumerate(new_encrypted))
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert decode_vigenere('DONTWORRYBEHAPPY',
'FVRVGWFTFFGRIDRF',
'DLLCZXMFVRVGWFTF') == "BEHAPPYDONTWORRY", "CHECKIO"
assert decode_vigenere('HELLO', 'OIWWC', 'ICP') == "BYE", "HELLO"
assert decode_vigenere('LOREMIPSUM',
'OCCSDQJEXA',
'OCCSDQJEXA') == "LOREMIPSUM", "DOLORIUM"
Jan. 20, 2017
Comments: