fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. int main(void) {
  6. int n;
  7. scanf("%d", &n);
  8. char table[1001][201];
  9. int min_len = 201;
  10. for(int i=0; i<n; i++){
  11. scanf("%s", table[i]);
  12. if(strlen(table[i]) < min_len){
  13. min_len = strlen(table[i]);
  14. }
  15. }
  16. char ciphertext[10001];
  17. scanf(" %[^\n]", ciphertext);
  18.  
  19. int len_key = 0;
  20. char key[201];
  21. for(int i = 0; i < min_len; i++){
  22. char c = table[0][i];
  23. int iskey = 1;
  24. for(int j = 1; j < n; j++){
  25. if(table[j][i] != c)
  26. iskey = 0;
  27. }
  28. if(iskey){
  29. key[len_key++] = c;
  30. }
  31. else{
  32. break;
  33. }
  34. }
  35. if(len_key == 0){
  36. printf("\n\n");
  37. return 0;
  38. }
  39. else{
  40. key[len_key] = '\0';
  41. printf("%s", key);
  42. }
  43.  
  44. // decrypt
  45. char plaintext[10001];
  46. int key_i = 0;
  47. for(int i=0; i<strlen(ciphertext); i++){
  48. char k = tolower(key[key_i % len_key]) - 'a';
  49. char c = ciphertext[i] ;
  50. if(isupper(c)){
  51. plaintext[i] = ((ciphertext[i] - 'A') - k + 26) % 26 + 'A';
  52. }
  53. else{
  54. plaintext[i] = ((ciphertext[i] - 'a') - k + 26) % 26 + 'a';
  55. }
  56. }
  57. plaintext[strlen(ciphertext)] = '\0';
  58. printf("%s", plaintext);
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0.01s 5320KB
stdin
3
flower
flow
flight
MpqwtHtcqo
stdout
flHklroCoxlj