Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
29-liner: apply sieve table to the encoded message solution in Clear category for AMSCO Cipher by Stensen
from itertools import zip_longest
def decode_amsco(message, key):
keyword = str(key)
key_length = len(keyword)
msg_length = len(message)
cumsum = 0
# Create the sieve Table
sieve = [[] for i in range(key_length)]
while cumsum < msg_length:
for i in range(key_length):
if i % 2 != 0 and len(sieve[i]) % 2 == 0 or i % 2 == 0 and len(sieve[i]) % 2 != 0:
if cumsum + 2 <= msg_length:
sieve[i] += [' ']
cumsum += 2
elif cumsum + 1 <= msg_length:
sieve[i] += [' ']
cumsum += 1
else:
if cumsum + 1 <= msg_length:
sieve[i] += [' ']
cumsum += 1
# Apply the sieve/filter to the message
for i in range(1, key_length + 1):
pos_col = sieve[keyword.index(str(i))]
for j in range(len(pos_col)):
row_len = len(pos_col[j])
pos_col[j] = message[:row_len]
message = message[row_len:]
return ''.join([''.join(i) for i in zip_longest(*sieve, fillvalue='')])
Sept. 17, 2021