#include <iostream>
using namespace std;
// szyfr Cezara dla jednego znaku (małe litery)
char szyfruj_znak(char znak, int klucz) {
if (znak >= 'a' && znak <= 'z') {
int litera = znak - 'a';
int nowa = (litera + klucz) % 26;
return char(nowa + 'a');
}
return znak; // spacje i inne znaki bez zmian
}
// szyfrowanie całego tekstu Cezarem
string szyfruj_cezar(string tekst, int klucz) {
string wynik = "";
for (int i = 0; i < tekst.size(); i++)
wynik += szyfruj_znak(tekst[i], klucz);
return wynik;
}
// zamiana liter parami
string szyfr(string s) {
string t = "";
for (int i = 0; i < s.size() - 1; i += 2)
t = t + s[i+1] + s[i];
if (s.size() % 2 != 0)
t = t + s[s.size()-1];
return t;
}
int main() {
string tekst1 = "kotwica";
string tekst2 = "szyfrowanie jest trudne";
// najpierw Cezar (np. klucz = 3), potem zamiana parami
cout << szyfr(szyfruj_cezar(tekst1, 3)) << endl;
cout << szyfr(szyfruj_cezar(tekst2, 3)) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gc3p5ZnIgQ2V6YXJhIGRsYSBqZWRuZWdvIHpuYWt1IChtYcWCZSBsaXRlcnkpCmNoYXIgc3p5ZnJ1al96bmFrKGNoYXIgem5haywgaW50IGtsdWN6KSB7CiAgICBpZiAoem5hayA+PSAnYScgJiYgem5hayA8PSAneicpIHsKICAgICAgICBpbnQgbGl0ZXJhID0gem5hayAtICdhJzsKICAgICAgICBpbnQgbm93YSA9IChsaXRlcmEgKyBrbHVjeikgJSAyNjsKICAgICAgICByZXR1cm4gY2hhcihub3dhICsgJ2EnKTsKICAgIH0KICAgIHJldHVybiB6bmFrOyAvLyBzcGFjamUgaSBpbm5lIHpuYWtpIGJleiB6bWlhbgp9CgovLyBzenlmcm93YW5pZSBjYcWCZWdvIHRla3N0dSBDZXphcmVtCnN0cmluZyBzenlmcnVqX2NlemFyKHN0cmluZyB0ZWtzdCwgaW50IGtsdWN6KSB7CiAgICBzdHJpbmcgd3luaWsgPSAiIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVrc3Quc2l6ZSgpOyBpKyspCiAgICAgICAgd3luaWsgKz0gc3p5ZnJ1al96bmFrKHRla3N0W2ldLCBrbHVjeik7CiAgICByZXR1cm4gd3luaWs7Cn0KCi8vIHphbWlhbmEgbGl0ZXIgcGFyYW1pCnN0cmluZyBzenlmcihzdHJpbmcgcykgewogICAgc3RyaW5nIHQgPSAiIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCkgLSAxOyBpICs9IDIpCiAgICAgICAgdCA9IHQgKyBzW2krMV0gKyBzW2ldOwoKICAgIGlmIChzLnNpemUoKSAlIDIgIT0gMCkKICAgICAgICB0ID0gdCArIHNbcy5zaXplKCktMV07CgogICAgcmV0dXJuIHQ7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIHRla3N0MSA9ICJrb3R3aWNhIjsKICAgIHN0cmluZyB0ZWtzdDIgPSAic3p5ZnJvd2FuaWUgamVzdCB0cnVkbmUiOwoKICAgIC8vIG5hanBpZXJ3IENlemFyIChucC4ga2x1Y3ogPSAzKSwgcG90ZW0gemFtaWFuYSBwYXJhbWkKICAgIGNvdXQgPDwgc3p5ZnIoc3p5ZnJ1al9jZXphcih0ZWtzdDEsIDMpKSA8PCBlbmRsOwogICAgY291dCA8PCBzenlmcihzenlmcnVqX2NlemFyKHRla3N0MiwgMykpIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=