Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
ADFGVX Cipher solution in Uncategorized category for ADFGVX Cipher by capback250
# migrated from python 2.7
import re
import math
verticals = 'ADFGVX'
def deleteDoubles(keyword):
fkey = ''
for char in keyword:
if char not in fkey:
fkey += char
return fkey
def encode(message, secret_alphabet, keyword):
keyword = deleteDoubles(keyword)
fmesg = ''.join(re.findall(r'\w', message.lower()))
codedString = ''.join(["{}{}".format(verticals[secret_alphabet.index(char) // 6], verticals[secret_alphabet.index(char) % 6]) for char in fmesg])
words = {x:'' for x in keyword}
for i in range(len(keyword)):
for j in range(int(math.ceil(len(codedString) / float(len(keyword))))):
try:
words[keyword[i]] += codedString[i + j * len(keyword)]
except IndexError: pass
return ''.join([words[x] for x in sorted(set(keyword))])
def decode(message, secret_alphabet, keyword):
keyword = deleteDoubles(keyword)
lens = {x:0 for x in keyword}
words = {x:'' for x in keyword}
codedString = ''
for i in range(len(keyword)):
for j in range(int(math.ceil(len(message) / float(len(keyword))))):
try:
if message[i + j * len(keyword)]:
lens[keyword[i]] += 1
except IndexError: pass
i = 0
for x in sorted(set(keyword)):
words[x] += message[i:i+lens[x]]
i += lens[x]
for k in range(max(list(map(len, list(words.values()))))+1):
for x in keyword:
try:
codedString += words[x][k]
except IndexError: break
return ''.join([secret_alphabet[verticals.index(codedString[j]) * 6 + verticals.index(codedString[j+1])] for j in range(0, len(codedString), 2)])
Feb. 5, 2016