Top.Mail.Ru
Ответы

Помогите с задачей

Шифровка текста с помощью решетки заключается в следующем. Решетка, т. е. квадрат из клетчатой бумаги 10x 10 клеток, некоторые клетки в котором вырезаны, совмещается с целым квадратом 10x 10 клеток и через прорези на бумагу наносятся первые буквы текста. Затем решетка поворачивается на 90° и через прорези записываются следующие буквы. Это повторяется еще дважды. Таким образом, на бумагу наносится 100 букв текста. Решетку можно изображать квадратной матрицей порядка 10 из нулей и единиц (нуль изображает прорезь). Доказать, что матрица [a,y]i=i io; /=i ю может служить ключом шифра, если из элементов аи% al0_i+i/, апоЧ+и a10- l+1; 10-/+i в точности один равен нулю. Даны последовательность из 100 букв и матрица-ключ. а) Зашифровать данную последовательность. б) Расшифровать данную последовательность. Помогите с задачей?(

По дате
По рейтингу
Аватар пользователя
Мастер
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
 import numpy as np 
 
def encrypt(text, key): 
    text = text.upper().replace(" ", "") 
    n = len(text) 
    grid = np.zeros((10, 10), dtype=str) 
    k = 0 
    for i in range(10): 
        for j in range(10): 
            if key[i][j] == "0": 
                grid[i][j] = text[k] 
                k += 1 
                if k == n: 
                    break 
        if k == n: 
            break 
    encrypted_text = "" 
    for i in range(4): 
        rotated_grid = np.rot90(grid, i) 
        for j in range(10): 
            for k in range(10): 
                if rotated_grid[j][k] != "0": 
                    encrypted_text += rotated_grid[j][k] 
    return encrypted_text 
 
def decrypt(text, key): 
    n = len(text) 
    grid = np.zeros((10, 10), dtype=str) 
    k = 0 
    for i in range(4): 
        rotated_grid = np.rot90(key, i) 
        for j in range(10): 
            for k in range(10): 
                if rotated_grid[j][k] == "0": 
                    grid[j][k] = text[k] 
                    k += 1 
                    if k == n: 
                        break 
            if k == n: 
                break 
        if k == n: 
            break 
    decrypted_text = "" 
    for i in range(10): 
        for j in range(10): 
            if grid[i][j] != "0": 
                decrypted_text += grid[i][j] 
    return decrypted_text