Zadanie : szyfr-kolumn-1c
Zadanie

W szyfrze kolumnowym jako klucza używa się permutacji pewnego n elementowego zbioru postaci {1,2,...,n}.

Istnieje wiele metod wygenerowania dowolnej permutacji takiego zbioru. Można posłużyć się tutaj zarówno liczbami pseudolosowymi, jak równiez z góry ustaloną funkcją o nieznanych parametrach czy współczynnikach. W poniższym przykładzie użyta jest funkcja f(n)=an2+b, gdzie a i b są liczbami naturalnymi.

DANE:
n - ilość elementów zbioru
a, b - współczynniki funkcji

WYNIK:
tablica t[1..n] zawierająca permutację zbioru {1,2,...,n}

ALGORYTM:
1. k:=n
2. Wpisz do tablicy t do kolejnych komórek liczby od 1 do k.
3. Dopóki k>1 wykonuj:
   a.) wyznacz komórkę tablicy: i:=1+(f(k) mod k)
   b.) zamień w tablicy t miejscami liczby na pozycjach i i k
   c.) zmniejsz o jeden k

W celu zaszyfrowania tekstu jawnego wpisujemy go do tablicy w kolejne kolumny a następnie odczytujemy wierszami zgodnie z permutacją wszystkich wierszy wyznaczoną przez funkcję f. Dla uproszczenia przyjmiemy, że tablica szyfrująca składa się z 5 wierszy i 5 kolumn. Dodatkowo przyjmiemy, że jeśli tekst jawny ma długość krótszą niż 25 znaków, to uzupełniamy go znakiem *.

a=1
b=10
Tekst jawny=INFORMACJA
Tablica:
-------
I M * * *
N A * * *
F C * * *
O J * * *
R A * * *
-------
Permutacja:
t = {1, 2, 3, 4, 5}
f(5)=1+(5^2+10) mod 5=1 --> 5 2 3 4 1 - wymiana t[1] z t[5]
f(4)=1+(4^2+10) mod 4=3 --> 5 2 4 3 1 - wymiana t[3] z t[4]
f(3)=1+(3^2+10) mod 3=2 --> 5 4 2 3 1 - wymiana t[2] z t[3]
f(2)=1+(2^2+10) mod 2=1 --> 4 5 2 3 1 - wymiana t[1] z t[2]
f(1)=1+(1^2+10) mod 1=1 --> 4 5 2 3 1 - wymiana t[1] z t[1]

Wypisujemy kolejno wiersze czwarty, piąty, drugi trzeci i pierwszy:
Kryptogram=OJ***RA***NA***FC***IM***

Napisz program, który odszyfruje podany kryptogram zaszyfrowany szyfrem kolumnowym używając tabelki o wymiarach 5 wierszy i 5 kolumn.

Wejście

Pierwszy wiersz wejścia zawiera liczby całkowite a i b z zakresu 1..10.
W wierszu drugim zapisano niepusty tekst o maksymalnej długości 25 znaków.

Wyjście

Kryptogram podanego tekstu.

Przykład

Dla danych podanych na wejściu:

8 5
HD***YJX**KTT**LYT**VBZ**

Poprawną odpowiedzią jest wyjście:

VLKYHBYTJDZTTX

Jeśli chcesz zobaczyć inny przykład odśwież tę stronę klawiszem F5

Opcje zadania:

Biblioteki         : iostream iomanip cmath string 
Limit czasu        : 0.1 s
Limit pamięci      : 32 MB
Słowa niedozwolone :