Метод кодирования шифром Ришелье заключается в следующем: пусть имеется сообщение, записанное с помощью букв латинского алфавита, и набор перестановок различной длины, тогда к сообщению применяют эти перестановки, разбивая сообщение на части и переставляя в них буквы определённым образом, в результате получают зашифрованное сообщение.
Напишите программу, которая на вход получает сообщение и набор перестановок, и результатом её работы является зашифрованное методом Ришелье сообщение.
Замечание:
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.