#include <iostream>
#include <string>
#include <cctype> // dla islower
using namespace std;
/**
* Funkcja szyfruje tekst małymi literami alfabetu łacińskiego.
* Pozycje parzyste szyfrowane są kluczem klucz1, a nieparzyste kluczem klucz2.
* @param tekst - wejściowy ciąg małych liter
* @param klucz1 - przesunięcie dla pozycji parzystych
* @param klucz2 - przesunięcie dla pozycji nieparzystych
* @return zaszyfrowany tekst
*/
string szyfruj2(const string &tekst, int klucz1, int klucz2) {
string wynik = tekst;
// Redukujemy klucze do zakresu 0-25
klucz1 = ((klucz1 % 26) + 26) % 26;
klucz2 = ((klucz2 % 26) + 26) % 26;
for (size_t i = 0; i < tekst.size(); i++) {
char c = tekst[i];
if (!islower(c)) {
throw invalid_argument("Tekst może zawierać tylko małe litery alfabetu łacińskiego.");
}
int przesuniecie = (i % 2 == 0) ? klucz1 : klucz2;
// Szyfr Cezara
wynik[i] = char('a' + ( (c - 'a' + przesuniecie) % 26 ));
}
return wynik;
}
int main() {
try {
cout << szyfruj2("poufnytekst", 3, 10) << endl; // oczekiwane: zreixbdhuvd
cout << szyfruj2("poczekajnamnie", 123, 5) << endl; // oczekiwane: uhhsjdfcstrgnx
}
catch (const exception &e) {
cerr << "Błąd: " << e.what() << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y2N0eXBlPiAvLyBkbGEgaXNsb3dlcgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLyoqCiAqIEZ1bmtjamEgc3p5ZnJ1amUgdGVrc3QgbWHFgnltaSBsaXRlcmFtaSBhbGZhYmV0dSDFgmFjacWEc2tpZWdvLgogKiBQb3p5Y2plIHBhcnp5c3RlIHN6eWZyb3dhbmUgc8SFIGtsdWN6ZW0ga2x1Y3oxLCBhIG5pZXBhcnp5c3RlIGtsdWN6ZW0ga2x1Y3oyLgogKiBAcGFyYW0gdGVrc3QgLSB3ZWrFm2Npb3d5IGNpxIVnIG1hxYJ5Y2ggbGl0ZXIKICogQHBhcmFtIGtsdWN6MSAtIHByemVzdW5pxJljaWUgZGxhIHBvenljamkgcGFyenlzdHljaAogKiBAcGFyYW0ga2x1Y3oyIC0gcHJ6ZXN1bmnEmWNpZSBkbGEgcG96eWNqaSBuaWVwYXJ6eXN0eWNoCiAqIEByZXR1cm4gemFzenlmcm93YW55IHRla3N0CiAqLwpzdHJpbmcgc3p5ZnJ1ajIoY29uc3Qgc3RyaW5nICZ0ZWtzdCwgaW50IGtsdWN6MSwgaW50IGtsdWN6MikgewogICAgc3RyaW5nIHd5bmlrID0gdGVrc3Q7CgogICAgLy8gUmVkdWt1amVteSBrbHVjemUgZG8gemFrcmVzdSAwLTI1CiAgICBrbHVjejEgPSAoKGtsdWN6MSAlIDI2KSArIDI2KSAlIDI2OwogICAga2x1Y3oyID0gKChrbHVjejIgJSAyNikgKyAyNikgJSAyNjsKCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRla3N0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgY2hhciBjID0gdGVrc3RbaV07CiAgICAgICAgaWYgKCFpc2xvd2VyKGMpKSB7CiAgICAgICAgICAgIHRocm93IGludmFsaWRfYXJndW1lbnQoIlRla3N0IG1vxbxlIHphd2llcmHEhyB0eWxrbyBtYcWCZSBsaXRlcnkgYWxmYWJldHUgxYJhY2nFhHNraWVnby4iKTsKICAgICAgICB9CiAgICAgICAgaW50IHByemVzdW5pZWNpZSA9IChpICUgMiA9PSAwKSA/IGtsdWN6MSA6IGtsdWN6MjsKICAgICAgICAvLyBTenlmciBDZXphcmEKICAgICAgICB3eW5pa1tpXSA9IGNoYXIoJ2EnICsgKCAoYyAtICdhJyArIHByemVzdW5pZWNpZSkgJSAyNiApKTsKICAgIH0KICAgIHJldHVybiB3eW5pazsKfQoKaW50IG1haW4oKSB7CiAgICB0cnkgewogICAgICAgIGNvdXQgPDwgc3p5ZnJ1ajIoInBvdWZueXRla3N0IiwgMywgMTApIDw8IGVuZGw7ICAgICAgLy8gb2N6ZWtpd2FuZTogenJlaXhiZGh1dmQKICAgICAgICBjb3V0IDw8IHN6eWZydWoyKCJwb2N6ZWtham5hbW5pZSIsIDEyMywgNSkgPDwgZW5kbDsgIC8vIG9jemVraXdhbmU6IHVoaHNqZGZjc3RyZ254CiAgICB9CiAgICBjYXRjaCAoY29uc3QgZXhjZXB0aW9uICZlKSB7CiAgICAgICAgY2VyciA8PCAiQsWCxIVkOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==