#include <iostream>
#include <string>
#include <cctype> // dla islower
using namespace std;
/**
*/
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y2N0eXBlPiAvLyBkbGEgaXNsb3dlcgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLyoqCiAqLwpzdHJpbmcgc3p5ZnJ1ajIoY29uc3Qgc3RyaW5nICZ0ZWtzdCwgaW50IGtsdWN6MSwgaW50IGtsdWN6MikgewogICAgc3RyaW5nIHd5bmlrID0gdGVrc3Q7CgogICAgLy8gUmVkdWt1amVteSBrbHVjemUgZG8gemFrcmVzdSAwLTI1CiAgICBrbHVjejEgPSAoKGtsdWN6MSAlIDI2KSArIDI2KSAlIDI2OwogICAga2x1Y3oyID0gKChrbHVjejIgJSAyNikgKyAyNikgJSAyNjsKCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRla3N0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgY2hhciBjID0gdGVrc3RbaV07CiAgICAgICAgaWYgKCFpc2xvd2VyKGMpKSB7CiAgICAgICAgICAgIHRocm93IGludmFsaWRfYXJndW1lbnQoIlRla3N0IG1vxbxlIHphd2llcmHEhyB0eWxrbyBtYcWCZSBsaXRlcnkgYWxmYWJldHUgxYJhY2nFhHNraWVnby4iKTsKICAgICAgICB9CiAgICAgICAgaW50IHByemVzdW5pZWNpZSA9IChpICUgMiA9PSAwKSA/IGtsdWN6MSA6IGtsdWN6MjsKICAgICAgICAvLyBTenlmciBDZXphcmEKICAgICAgICB3eW5pa1tpXSA9IGNoYXIoJ2EnICsgKCAoYyAtICdhJyArIHByemVzdW5pZWNpZSkgJSAyNiApKTsKICAgIH0KICAgIHJldHVybiB3eW5pazsKfQppbnQgbWFpbigpIHsKICAgIHRyeSB7CiAgICAgICAgY291dCA8PCBzenlmcnVqMigicG91Zm55dGVrc3QiLCAzLCAxMCkgPDwgZW5kbDsgICAgICAvLyBvY3pla2l3YW5lOiB6cmVpeGJkaHV2ZAogICAgICAgIGNvdXQgPDwgc3p5ZnJ1ajIoInBvY3pla2FqbmFtbmllIiwgMTIzLCA1KSA8PCBlbmRsOyAgLy8gb2N6ZWtpd2FuZTogdWhoc2pkZmNzdHJnbngKICAgIH0KICAgIGNhdGNoIChjb25zdCBleGNlcHRpb24gJmUpIHsKICAgICAgICBjZXJyIDw8ICJCxYLEhWQ6ICIgPDwgZS53aGF0KCkgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9