Subject: VT70
From: "korlyukov" <[email-masked]>
To: "Valentin Turchin" <[email-masked]>
Date: Wed, 14 Feb 2001 14:17:51 +0200

Задача.

Шеф разведки, где работают 7 агентов, для шифрования сверхважного сообщения придумал несложный шифр:

Первые пять букв латинского алфавита  a,b,c,d,e заменяются друг на друга по кругу, т.е. a заменяется на b, b заменяется на c, c заменяется на d, d заменяется на e, e заменяется на a. 

Аналогичное проделывается со следующими семью буквами - f, g, h, i, j, k, l.

Аналогичное проделывается со следующими пятью буквами - m n, o, p, q.

Аналогичное проделывается со следующими семью буквами - r, s, t, u, v, w, x

Оставшиеся две буквы y и z  заменяются друг на друга.

Чтобы этот простой шифр превратился в очень сложный, шеф приказал зашифровать сверхважное сообщение агенту 001 (пользуясь этим шифром). Затем то, что получилось, зашифровал агент 002 и так далее, до агента 007.

Затем опять агент 001 и дак далее, 10 раз.

В итоге исходное сообщение шифровалось 70 раз !

Помогите шпиону расшифровать исходное сообщение.

Будем решать задачу при помощи суперкомпилятора.

Опишем однократное шифрование и организуем 70-кратное шифрование, получаем программу

*$MST_FROM_ENTRY;
*$EXECUTABLE Add;
$EXTRN Add;

$ENTRY  A { 
      e.string = <B (0) (70) (<Shifr >) (e.string)>;
 }

Shifr {
     = 
    'abcdea'
    'fghijklf'
    'mnopqm'
    'rstuvwxr'
    'yzy';
 }           

B {
  (e.n) (e.n) (e.c) (e.string) = e.string;
  (e.n) (e.m) (e.c) (e.string) = <B (<Add (e.n) 1>) (e.m) (e.c)
                                 (<Codir (e.c) (e.string)>)>;

 }

Codir {
   (e.c) ( ) = ;
   (e.c) (s.a e.string) = <Search s.a (e.c)>
                          <Codir (e.c) (e.string)>;
 }

Search {
   s.a (s.a s.b e.1) = s.b;
   s.a (s.c s.b e.1) = <Search s.a (s.b e.1)>;
   s.a (s.x) = s.a;
 } 
Суперкомпилируем эту программу, в которой компизиция 70 шифрований. Суперкомпилятор работает 29 минут и строит остаточную программу -

* InputFormat: <A e.41 >
$ENTRY A {
 e.41  = e.41 ;
}
Все правильно, указанная процедура приводит к тождественному шифрованию. Результат суперкомпиляции идеален с любой точки зрения.

В заключение отметим, что первый раз тождественный шифр получается только на 70 шифровании.

Александр