Перейти к содержанию

Метод кодирования шифром Ришелье заключается в следующем: пусть имеется сообщение, записанное с помощью букв латинского алфавита, и набор перестановок различной длины, тогда к сообщению применяют эти перестановки, разбивая сообщение на части и переставляя в них буквы определённым образом, в результате получают зашифрованное сообщение

Метод кодирования шифром Ришелье заключается в следующем: пусть имеется сообщение, записанное с помощью букв латинского алфавита, и набор перестановок различной длины, тогда к сообщению применяют эти перестановки, разбивая сообщение на части и переставляя в них буквы определённым образом, в результате получают зашифрованное сообщение.

Напишите программу, которая на вход получает сообщение и набор перестановок, и результатом её работы является зашифрованное методом Ришелье сообщение.

Замечание:

1) При шифровании сообщения в нём игнорируются пробелы и знаки препинания, а также все буквы переводятся в прописные.

2) Перестановка длины n — это набор чисел от 1 до n, записанный в определённом порядке. Элементы перестановки вводятся через пробел, а сами перестановки разделены «;».

3) Суммарная длина перестановок совпадает с количеством букв в сообщении и не превышает 250.

Пример: Сообщение «I am happy!» и 2 перестановки «2 3 1; 4 2 1 3 5», тогда сообщение преобразуем к виду «IAMHAPPY», применяя первую перестановку к первым трём буквам, получим «AMI», вторую перестановку к следующим пяти буквам—»PAHPY». В итоге получим «AMIPAHPY».


Программа на языке PascalABC 1.8. Программа эффективна по времени и по памяти.

var n, i, k, l, er:integer; c:char;

mes, chmes, cipher:string;

begin

writeln(’Введите сообщение >’);

readln(mes);

chmes:=’’; l:=Length(mes);

for i := 1 to l do

begin

c:=mes[i];

if((c>=’a’) and (c<=’z’)) or ((c>=’A’)

and (c<=’Z’)) then

chmes:=chmes+UpCase(c)

end;

l:=Length(chmes); i:=0;

writeln(’Введите набор перестановок >’);

mes:=’’; k:=0;

while i begin

read(c);

if (c<>’;’) and (c<>’ ’) then mes:=mes+c

else

begin

val(mes, n, er);

cipher:=cipher+chmes[k+n];

mes:=’’; i:=i+1;

if c=’;’ then k:=i

end;

end;

read(n);

cipher:=cipher+chmes[k+n];

writeln(cipher);

end.