Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("adfgx.in");
- ofstream fout("adfgx.out");
- int c,messageLen,keyLen;
- char square[5][5];
- char Index[]={'A','D','F','G','X', '\0'};
- char key[26];
- char message[3000001];
- int main()
- {
- int i, j, k;
- fin>>c;
- fin.get();
- if(c==1) /// codific
- {
- for(i=0;i<5;++i)
- for(j=0;j<5;++j)
- fin>>square[i][j];
- fin>>key;
- fin>>message;
- messageLen=strlen(message);
- keyLen=strlen(key);
- char cipher1[2*messageLen];
- for(i=0;i<messageLen;++i)
- for(j=0;j<5;++j)
- for(k=0;k<5;++k)
- if(message[i]==square[j][k])
- cipher1[2*i]=Index[j],cipher1[2*i+1]=Index[k];
- cipher1[2*messageLen]='\0';
- int cipherLen=sizeof(cipher1);
- int rows;
- if(cipherLen%keyLen>0)
- rows=cipherLen/keyLen+1;
- else
- rows=cipherLen/keyLen;
- char A[rows][keyLen];
- i=0;j=0;
- for(k=0;k<cipherLen;++k)
- {
- if(k&&k%keyLen==0)
- ++i,j=0;
- A[i][j++]=cipher1[k];
- }
- if(cipherLen%keyLen>0)
- for(j=cipherLen%keyLen; j<keyLen; ++j)
- A[rows-1][j]=' ';
- ++i;
- int pos=0;
- char B[rows][keyLen];
- for(char c='a';c<='z';++c)
- for(j=0;j<keyLen;++j)
- if(key[j]==c)
- {
- for(i=0;i<rows;++i)
- B[i][pos]=A[i][j];
- ++pos;
- }
- for(j=0;j<keyLen;++j)
- {
- for(i=0;i<rows;++i)
- if(B[i][j]!=' ')
- fout<<B[i][j];
- fout<<' ';
- }
- }
- else /// c=2 decodez
- {
- for(i=0;i<5;++i) /// Citesc matricea 5x5
- for(j=0;j<5;++j)
- fin>>square[i][j];
- fin.get();
- fin>>key; /// Citesc cheia
- keyLen=strlen(key);
- fin>>message; /// Citesc fragmentul de message;
- j=0;
- int rows=(int)strlen(message)+1;
- char B[rows][keyLen];
- while(!fin.eof()) /// Prelucrez fragmentele de message
- {
- int messageLen=(int)strlen(message);
- for(i=0;i<messageLen;++i)
- B[i][j]=message[i];
- for(i=messageLen;i<rows;++i)
- B[i][j]=' ';
- ++j;
- fin.get();
- fin>>message;
- }
- int NonLit=0,NrCol=j;
- for(j=0;j<NrCol;++j)
- if(B[rows-1][j]<'A'||B[rows-1][j]>'Z')
- ++NonLit;
- if(NonLit==NrCol)
- --rows;
- char A[rows][keyLen];
- int pos=0;
- for(char c='a';c<='z';++c)
- for(j=0;j<keyLen;++j)
- if(key[j]==c)
- {
- for(i=0;i<rows;++i)
- A[i][j]=B[i][pos];
- ++pos;
- }
- k=0;
- char cipher[rows*keyLen];
- for(i=0;i<rows;++i)
- for(j=0;j<keyLen;++j)
- if(A[i][j]!=' ')
- cipher[k++]=A[i][j];
- cipher[k]='\0';
- int Lin=0,Col=0;
- for(i=0;i<k;i+=2)
- {
- for(j=0;j<5;++j)
- {
- if(Index[j]==cipher[i])
- Lin=j;
- if(Index[j]==cipher[i+1])
- Col=j;
- }
- fout<<square[Lin][Col];
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement