Source code for submission s602

false_security.cpp

  1. #include <map>
  2. #include <cstdio>
  3. #include <string>
  4. #include <algorithm>
  5. #include <cstdlib>
  6. #include <cstring>
  7.  
  8. using namespace std;
  9.  
  10. string letter_morse[30] = {
  11. ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
  12. "....", "..", ".---", "-.-", ".-..", "--", "-.",
  13. "---", ".--.", "--.-", ".-.", "...", "-", "..-",
  14. "...-", ".--", "-..-", "-.--", "--..",
  15. "..--", ".-.-", "---.", "----"
  16. };
  17.  
  18. static inline int get_index(char a){
  19. if (a >= 'A' && a <= 'Z'){
  20. return a - 'A';
  21. }
  22. switch (a){
  23. case '_':
  24. return 26;
  25. case ',':
  26. return 27;
  27. case '.':
  28. return 28;
  29. case '?':
  30. return 29;
  31. }
  32. }
  33.  
  34. map<string, char> morse_letter;
  35.  
  36. #include <iostream>
  37.  
  38. static inline void init(){
  39. for (int i = 0; i < 26; i++){
  40. morse_letter[letter_morse[i]] = (i + 'A');
  41. }
  42. morse_letter[letter_morse[26]] = '_';
  43. morse_letter[letter_morse[27]] = ',';
  44. morse_letter[letter_morse[28]] = '.';
  45. morse_letter[letter_morse[29]] = '?';
  46.  
  47. /* for (map<string, char>::iterator it = morse_letter.begin();
  48. it != morse_letter.end(); ++it){
  49. cout << it->first << " " << it->second << std::endl;
  50. }
  51. */
  52. }
  53.  
  54. #define MAX_LEN 1024
  55.  
  56. int main(){
  57.  
  58. init();
  59. // printf("initing\n");
  60. char message_buf[MAX_LEN];
  61. int res;
  62. char result[MAX_LEN];
  63. while (scanf("%s%n%*c", message_buf, &res) != EOF){
  64. // printf("Read: %s\n", message_buf);
  65. // printf("Length: %d\n", res);
  66. string morse_buf;
  67. string len;
  68. memset(result, 0, res + 1);
  69. for (int i = 0; i < res; i++){
  70. // int index = get_index(message_buf[i]);
  71. // printf("Index is: %d\n", index);
  72. string& current = letter_morse[get_index(message_buf[i])];
  73. // printf("morse repre is %s\n", current.c_str());
  74. len += (char) (current.size() + '0');
  75. morse_buf += current;
  76. }
  77. // printf("len before rev: %s\n", len.c_str());
  78. reverse(len.begin(), len.end());
  79. // printf("len after rev: %s\n", len.c_str());
  80. int morse_index = 0;
  81. int result_index = 0;
  82. for (int j = 0; j < res; j++){
  83. int s = len[j] - '0';
  84. // string substring = string(&morse_buf[morse_index], s);//morse_buf.substr(morse_index, morse_index + s);
  85. // printf("substr: %s\n", substring.c_str());
  86. result[result_index] = morse_letter[string(&morse_buf[morse_index], s)];
  87. // printf("s: %d\nmorse_index: %d\n result_index: %d\n result: %s\n", s, morse_index, result_index, result);
  88. morse_index += s;
  89. result_index++;
  90. }
  91.  
  92. // printf("string len is :%d\n", res);
  93. // printf("before setting null: %s\n", result);
  94. result[res] = 0;
  95. printf("%s\n", result);
  96.  
  97. }
  98. return 0;
  99. }
  100.