Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
AMSCO cipher solution in Uncategorized category for AMSCO Cipher by capback250
# migrated from python 2.7
import math
def decode_amsco(string, key):
m = int(math.ceil(len(string) / float(len(str(key)))))
fakeStr = 'x' * len(string)
table = [[''] * len(str(key)) for _ in range(m)]
tableMid = [[''] * len(str(key)) for _ in range(m)]
tableEnd = [[''] * len(str(key)) for _ in range(m)]
weigBefore = {x:0 for x in str(key)}
weigAfter = {x:'' for x in str(key)}
for i1, j1 in enumerate(table):
for i2, j2 in enumerate(j1):
if (i1 + i2) % 2:
tableMid[i1][i2] = 'xx'
if 'xx' in fakeStr:
table[i1][i2] = 'xx'
fakeStr = fakeStr[:-2]
elif 'x' in fakeStr:
table[i1][i2] = 'x'
fakeStr = fakeStr[:-1]
else:
table[i1][i2] = ''
else:
tableMid[i1][i2] = 'x'
if 'x' in fakeStr:
table[i1][i2] = 'x'
fakeStr = fakeStr[:-1]
table = [x for x in table if ''.join(x)]
for i, j in enumerate(str(key)):
weigBefore[j] = len(''.join(zip(*table)[i]))
c = 0
for i in sorted(list(str(key))):
weigAfter[i] = string[c:c + weigBefore[i]]
c += weigBefore[i]
for ind, char in enumerate(str(key)):
st = weigAfter[char]
c = 0
for i, j in enumerate(zip(*table)[ind]):
tableEnd[i][ind] = st[c:c+len(j)]
c += len(j)
return ''.join([''.join(x) for x in tableEnd])
Feb. 12, 2016