Advertisement
mickypinata

CUBE-T009: Z-Encryption

Jun 7th, 2021
865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6.     int key, len;
  7.     scanf("%d", &key);
  8.     string str;
  9.     cin >> str;
  10.     if(key == 1){
  11.         cout << str;
  12.         return 0;
  13.     }
  14.     len = str.size();
  15.     string ans(len + 1, '\0');
  16.  
  17.     // Up Zip
  18.     int jump = 3 * key - 4;
  19.     int sIdx = 0;
  20.     int aIdx = key - 1;
  21.     while(aIdx < len){
  22.         for(int i = 0; i < key && aIdx < len; ++i){
  23.             ans[aIdx++] = str[sIdx++];
  24.         }
  25.         aIdx += jump;
  26.     }
  27.  
  28.     // Middle Zip
  29.     for(int l = 0; l < key - 2; ++l){
  30.         int up = key + l * 2;
  31.         int down = key + (key - 3 - l) * 2;
  32.         bool isUp = true;
  33.         aIdx = key - 2 - l;
  34.         while(aIdx < len){
  35.             ans[aIdx++] = str[sIdx++];
  36.             if(isUp){
  37.                 aIdx += up;
  38.             } else {
  39.                 aIdx += down;
  40.             }
  41.             isUp = !isUp;
  42.         }
  43.     }
  44.  
  45.     // Down Zip
  46.     ans[0] = str[sIdx++];
  47.     aIdx = jump + 1;
  48.     while(aIdx < len){
  49.         for(int i = 0; i < key && aIdx < len; ++i){
  50.             ans[aIdx++] = str[sIdx++];
  51.         }
  52.         aIdx += jump;
  53.     }
  54.     printf("%s", ans.c_str());
  55.  
  56.     return 0;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement