Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
generator for indices solution in Clear category for Rotating Grille Cipher by Leonix
import itertools
def grille_encrypt(plaintext, grille):
try:
result = [None] * len(plaintext)
for char, i in zip(plaintext, infinite_indices(grille)):
result[i] = char
return "".join(result)
except ValueError:
return None
def infinite_indices(grille):
template = list(indices(grille))
for loop_count in itertools.count():
for i in template:
yield i + loop_count*(len(grille)**2)
def indices(grille):
used_indices = set()
for _ in range(4):
for hole, i in zip(itertools.chain(*grille), itertools.count()):
if hole == 'X':
if i in used_indices:
raise ValueError()
used_indices.add(i)
yield i
grille = ["".join(reversed(line)) for line in zip(*grille)]
if len(used_indices) != len(grille)**2:
raise ValueError()
Dec. 16, 2021
Comments: