Извини, код не фонтан, ну как умею.
def getnumber(x, y):
return 4*(int(y)-1)+(int(x)-1)
def encode(text, xkeys, ykeys):
counter = 0
newtext = ['' for _ in range(len(text))]
for y in ykeys:
for x in xkeys:
if counter < len(text):
newtext[getnumber(x, y)] = text[counter]
counter += 1
return ''.join(newtext) #ТУТ ПОДГОНЯТЬ УРАВНЕНИЕ ТАК, ЧТОБЫ ПРИ ШИФРОВКИ "ПРИЛЕТАЮВОСЬМОГО" ПОЛУЧАЛОСЬ "ТЮАЕООГМРЛИПОЬСВ"
def decode(text, xkeys, ykeys):
return) ''.join(text[getnumber(x, y)] for y in ykeys for x in xkeys)