Advertisement
a53

adfgx

a53
Aug 1st, 2021
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream fin("adfgx.in");
  4. ofstream fout("adfgx.out");
  5. int c,messageLen,keyLen;
  6. char square[5][5];
  7. char Index[]={'A','D','F','G','X', '\0'};
  8. char key[26];
  9. char message[3000001];
  10. int main()
  11. {
  12. int i, j, k;
  13. fin>>c;
  14. fin.get();
  15. if(c==1) /// codific
  16. {
  17. for(i=0;i<5;++i)
  18. for(j=0;j<5;++j)
  19. fin>>square[i][j];
  20. fin>>key;
  21. fin>>message;
  22. messageLen=strlen(message);
  23. keyLen=strlen(key);
  24. char cipher1[2*messageLen];
  25. for(i=0;i<messageLen;++i)
  26. for(j=0;j<5;++j)
  27. for(k=0;k<5;++k)
  28. if(message[i]==square[j][k])
  29. cipher1[2*i]=Index[j],cipher1[2*i+1]=Index[k];
  30. cipher1[2*messageLen]='\0';
  31. int cipherLen=sizeof(cipher1);
  32. int rows;
  33. if(cipherLen%keyLen>0)
  34. rows=cipherLen/keyLen+1;
  35. else
  36. rows=cipherLen/keyLen;
  37. char A[rows][keyLen];
  38. i=0;j=0;
  39. for(k=0;k<cipherLen;++k)
  40. {
  41. if(k&&k%keyLen==0)
  42. ++i,j=0;
  43. A[i][j++]=cipher1[k];
  44. }
  45. if(cipherLen%keyLen>0)
  46. for(j=cipherLen%keyLen; j<keyLen; ++j)
  47. A[rows-1][j]=' ';
  48. ++i;
  49. int pos=0;
  50. char B[rows][keyLen];
  51. for(char c='a';c<='z';++c)
  52. for(j=0;j<keyLen;++j)
  53. if(key[j]==c)
  54. {
  55. for(i=0;i<rows;++i)
  56. B[i][pos]=A[i][j];
  57. ++pos;
  58. }
  59. for(j=0;j<keyLen;++j)
  60. {
  61. for(i=0;i<rows;++i)
  62. if(B[i][j]!=' ')
  63. fout<<B[i][j];
  64. fout<<' ';
  65. }
  66. }
  67. else /// c=2 decodez
  68. {
  69. for(i=0;i<5;++i) /// Citesc matricea 5x5
  70. for(j=0;j<5;++j)
  71. fin>>square[i][j];
  72. fin.get();
  73. fin>>key; /// Citesc cheia
  74. keyLen=strlen(key);
  75. fin>>message; /// Citesc fragmentul de message;
  76. j=0;
  77. int rows=(int)strlen(message)+1;
  78. char B[rows][keyLen];
  79. while(!fin.eof()) /// Prelucrez fragmentele de message
  80. {
  81. int messageLen=(int)strlen(message);
  82. for(i=0;i<messageLen;++i)
  83. B[i][j]=message[i];
  84. for(i=messageLen;i<rows;++i)
  85. B[i][j]=' ';
  86. ++j;
  87. fin.get();
  88. fin>>message;
  89. }
  90. int NonLit=0,NrCol=j;
  91. for(j=0;j<NrCol;++j)
  92. if(B[rows-1][j]<'A'||B[rows-1][j]>'Z')
  93. ++NonLit;
  94. if(NonLit==NrCol)
  95. --rows;
  96. char A[rows][keyLen];
  97. int pos=0;
  98. for(char c='a';c<='z';++c)
  99. for(j=0;j<keyLen;++j)
  100. if(key[j]==c)
  101. {
  102. for(i=0;i<rows;++i)
  103. A[i][j]=B[i][pos];
  104. ++pos;
  105. }
  106. k=0;
  107. char cipher[rows*keyLen];
  108. for(i=0;i<rows;++i)
  109. for(j=0;j<keyLen;++j)
  110. if(A[i][j]!=' ')
  111. cipher[k++]=A[i][j];
  112. cipher[k]='\0';
  113. int Lin=0,Col=0;
  114. for(i=0;i<k;i+=2)
  115. {
  116. for(j=0;j<5;++j)
  117. {
  118. if(Index[j]==cipher[i])
  119. Lin=j;
  120. if(Index[j]==cipher[i+1])
  121. Col=j;
  122. }
  123. fout<<square[Lin][Col];
  124. }
  125. }
  126. return 0;
  127. }
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement