Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Sudo make me a curry solution in Clear category for Playfair Cipher by veky
from functools import partial
curry = partial(partial, partial)
def maketable(key):
import string
seen, allowed = set(), string.ascii_lowercase + string.digits
for symbol in key.lower() + allowed:
if symbol in set(allowed) - seen: yield symbol
seen.add(symbol)
def makepairs(message):
buffer, clean = None, filter(str.isalnum, message.lower())
while True:
first = buffer or next(clean)
buffer, second = None, next(clean, "zx"[first == "z"])
if first == second: buffer, second = second, "xz"[first == "x"]
yield first + second
@curry
def makeadj(spin, index): return (spin + index) % 6
@curry
def codec(spin, message, key):
table = "".join(maketable(key))
adj = makeadj(spin)
def transform(pair):
(a, b), (c, d) = (divmod(table.index(char), 6) for char in pair)
if b == d: a, c = adj(a), adj(c)
elif a == c: b, d = adj(b), adj(d)
else: b, d = d, b
return table[a *6+ b] + table[c *6+ d]
return "".join(map(transform, makepairs(message)))
encode, decode = map(codec, (1, -1))
June 21, 2015
Comments: