2015-12-01 20:31:43 +01:00
|
|
|
from itertools import cycle, chain
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def fence_pattern(rails, size):
|
|
|
|
|
zig_zag = cycle(chain(range(rails), range(rails - 2, 0, -1)))
|
|
|
|
|
return zip(zig_zag, range(size))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def encode(msg, rails):
|
|
|
|
|
fence = fence_pattern(rails, len(msg))
|
2021-11-23 14:05:17 +01:00
|
|
|
return ''.join(msg[idx] for _, idx in sorted(fence))
|
2015-12-01 20:31:43 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def decode(msg, rails):
|
|
|
|
|
fence = fence_pattern(rails, len(msg))
|
|
|
|
|
fence_msg = zip(msg, sorted(fence))
|
2021-11-23 14:05:17 +01:00
|
|
|
return ''.join(char for char, _ in sorted(fence_msg, key=lambda item: item[1][1]))
|