#include <stdio.h>
#include <inttypes.h>
#include <ctype.h>
int calculateKey(char letter, int key, int start_key)
{
key
= key
== 0 ? start_key
: (toupper(letter
+ 1) - 65) % key
; key %= 26;
return key;
}
char cntelements(char* element_str)
{
int elements;
for(elements = 0; element_str[elements] != '\0'; ++elements)
{
elements = elements + 1;
}
return elements;
}
char encodeLetter(char letter, int key)
{
int shiftDirection = (key % 2 == 0) ? key : -key;
int shifted = letter + shiftDirection;
int letter_param;
if (letter > 96 && letter < 123)
{
if (shifted < 97)
{
letter_param = 122 - (97 - shifted) + 1;
}
else if (shifted > 122)
{
letter_param = 97 + (shifted - 122) - 1;
}
else
{
letter_param = shifted;
}
return letter_param;
}
if (letter > 64 && letter < 91)
{
if (shifted < 65)
{
letter_param = 90 - (65 - shifted) + 1;
}
else if (shifted > 90)
{
letter_param = 65 + (shifted - 90) - 1;
}
else
{
letter_param = shifted;
}
return letter_param;
}
return letter;
}
unsigned int cipher(char* cipher_str, int start_key)
{
int cntChars = 0;
int elements = cntelements(cipher_str);
int i;
int key = 0;
for(i = 0; i <= elements; i++)
{
if((cipher_str[i] < 91 && cipher_str[i] > 64) ||
(cipher_str[i] < 123 && cipher_str[i] > 96))
{
cntChars++;
}
key = calculateKey(cipher_str[i], key, start_key);
cipher_str[i] = encodeLetter(cipher_str[i], key);
}
return cntChars;
}
int main()
{
char word[] = "GGGG";
cipher(word, 50);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4gIAoKaW50IGNhbGN1bGF0ZUtleShjaGFyIGxldHRlciwgaW50IGtleSwgaW50IHN0YXJ0X2tleSkKewogIGtleSA9IGtleSA9PSAwID8gc3RhcnRfa2V5IDogKHRvdXBwZXIobGV0dGVyICsgMSkgLSA2NSkgJSBrZXk7CiAga2V5ICU9IDI2OwogIHJldHVybiBrZXk7Cn0KCmNoYXIgY250ZWxlbWVudHMoY2hhciogZWxlbWVudF9zdHIpCnsKICBpbnQgZWxlbWVudHM7CgogIGZvcihlbGVtZW50cyA9IDA7IGVsZW1lbnRfc3RyW2VsZW1lbnRzXSAhPSAnXDAnOyArK2VsZW1lbnRzKQogIHsKICAgIGVsZW1lbnRzID0gZWxlbWVudHMgKyAxOwogIH0KCiAgcmV0dXJuIGVsZW1lbnRzOwp9CgpjaGFyIGVuY29kZUxldHRlcihjaGFyIGxldHRlciwgaW50IGtleSkKewogIGludCBzaGlmdERpcmVjdGlvbiA9IChrZXkgJSAyID09IDApID8ga2V5IDogLWtleTsKICBpbnQgc2hpZnRlZCA9IGxldHRlciArIHNoaWZ0RGlyZWN0aW9uOwogIGludCBsZXR0ZXJfcGFyYW07CgogIGlmIChsZXR0ZXIgPiA5NiAmJiBsZXR0ZXIgPCAxMjMpCiAgewogICAgaWYgKHNoaWZ0ZWQgPCA5NykKICAgIHsKICAgICAgbGV0dGVyX3BhcmFtID0gMTIyIC0gKDk3IC0gc2hpZnRlZCkgKyAxOwogICAgfQoKICAgIGVsc2UgaWYgKHNoaWZ0ZWQgPiAxMjIpCiAgICB7CiAgICAgIGxldHRlcl9wYXJhbSA9IDk3ICsgKHNoaWZ0ZWQgLSAxMjIpIC0gMTsKICAgIH0KICAgIAogICAgZWxzZQogICAgeyAgICAKICAgICAgbGV0dGVyX3BhcmFtID0gc2hpZnRlZDsKICAgIH0KICAgIHJldHVybiBsZXR0ZXJfcGFyYW07CiAgfQoKICBpZiAobGV0dGVyID4gNjQgJiYgbGV0dGVyIDwgOTEpCiAgewogICAgaWYgKHNoaWZ0ZWQgPCA2NSkKICAgIHsKICAgICAgbGV0dGVyX3BhcmFtID0gOTAgLSAoNjUgLSBzaGlmdGVkKSArIDE7CiAgICB9CgogICAgZWxzZSBpZiAoc2hpZnRlZCA+IDkwKQogICAgewogICAgICBsZXR0ZXJfcGFyYW0gPSA2NSArIChzaGlmdGVkIC0gOTApIC0gMTsKICAgIH0KCiAgICBlbHNlCiAgICB7ICAgIAogICAgICBsZXR0ZXJfcGFyYW0gPSBzaGlmdGVkOwogICAgfQogICAgcmV0dXJuIGxldHRlcl9wYXJhbTsKICB9CgogCiAgICByZXR1cm4gbGV0dGVyOwp9Cgp1bnNpZ25lZCBpbnQgY2lwaGVyKGNoYXIqIGNpcGhlcl9zdHIsIGludCBzdGFydF9rZXkpCnsKICBpbnQgY250Q2hhcnMgPSAwOwogIGludCBlbGVtZW50cyA9IGNudGVsZW1lbnRzKGNpcGhlcl9zdHIpOwogIGludCBpOwogIGludCBrZXkgPSAwOwogCiAgZm9yKGkgPSAwOyBpIDw9IGVsZW1lbnRzOyBpKyspCiAgewogICAgCiAgICBpZigoY2lwaGVyX3N0cltpXSA8IDkxICYmIGNpcGhlcl9zdHJbaV0gPiA2NCkgfHwKICAgIChjaXBoZXJfc3RyW2ldIDwgMTIzICYmIGNpcGhlcl9zdHJbaV0gPiA5NikpCiAgICB7ICAgICAgICAKICAgICAgY250Q2hhcnMrKzsKICAgIH0KICAgIGtleSA9IGNhbGN1bGF0ZUtleShjaXBoZXJfc3RyW2ldLCBrZXksIHN0YXJ0X2tleSk7CiAgICBwcmludGYoIiVkXG4iLCBrZXkpOwogICAgY2lwaGVyX3N0cltpXSA9IGVuY29kZUxldHRlcihjaXBoZXJfc3RyW2ldLCBrZXkpOwogIH0KCiAgcmV0dXJuIGNudENoYXJzOwp9CgppbnQgbWFpbigpCnsKCWNoYXIgd29yZFtdID0gIkdHR0ciOwoJY2lwaGVyKHdvcmQsIDUwKTsKCXByaW50ZigiJXMiLCB3b3JkKTsKfQ==