84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
/*
|
|
Restriction: Input string has to be in lower case without any special characters
|
|
*/
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
void mul(int first[3][3], int second[3][10], int result[3][10])
|
|
{
|
|
int c, d, sum, k;
|
|
int i, j;
|
|
for ( c = 0 ; c < 3 ; c++ )
|
|
{
|
|
for ( d = 0 ; d < 10 ; d++ )
|
|
{
|
|
sum = 0;
|
|
for ( k = 0 ; k < 3 ; k++ )
|
|
{
|
|
sum = sum + first[c][k] * second[k][d];
|
|
}
|
|
result[c][d] = sum;
|
|
}
|
|
}
|
|
}
|
|
int main()
|
|
{
|
|
char str[29] = "this message is to be encoded";
|
|
int len;
|
|
int i, j;
|
|
int result[3][10] = {0};
|
|
int key[3][3] =
|
|
{
|
|
{-3, -3, -4},
|
|
{0, 1, 1},
|
|
{4, 3, 4}
|
|
};
|
|
int inv_key[3][3] =
|
|
{
|
|
{1, 0, 1},
|
|
{4, 4, 3},
|
|
{-4, -3, -3}
|
|
};
|
|
int encode[3][10] = {32};
|
|
int decode[3][10] = {0};
|
|
len = strlen(str);
|
|
for (i = 0; i < 10; i++)
|
|
{
|
|
for(j = 0; j < 3; j++)
|
|
{
|
|
if (str[j + i*3] >='a' && str[j + i*3] <='z')
|
|
{
|
|
encode[j][i] = str[j + i*3] - 96;
|
|
}
|
|
if (str[j + i*3] == 32)
|
|
{
|
|
encode[j][i] = 32;
|
|
}
|
|
if (str[j + i*3] == '\0')
|
|
break;
|
|
}
|
|
if (str[j + i*3] == '\0')
|
|
break;
|
|
}
|
|
mul( key, encode, result);
|
|
printf("\nEncoded message to be sent: ");
|
|
for (i = 0; i < 10; i++)
|
|
{
|
|
for ( j = 0 ; j < 3; j++)
|
|
printf("%d, ", result[j][i]);
|
|
}
|
|
printf("\nDecoded message is: ");
|
|
mul(inv_key, result, decode);
|
|
for (i = 0; i < 10; i++)
|
|
{
|
|
for ( j = 0; j < 3; j++)
|
|
{
|
|
if ( ((decode[j][i]+96)) >= 97 && ((decode[j][i]+96) <= 123))
|
|
printf("%c", (decode[j][i] + 96) );
|
|
else if ( decode[j][i] == 32)
|
|
printf(" ");
|
|
else
|
|
return;
|
|
}
|
|
}
|
|
return 0;
|
|
} |