Source code for submission s597

fc.cpp

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <string>
  4. #include <iostream>
  5. #include <map>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11. char message[1001];
  12. int lens[1001];
  13. struct {
  14. char chrs[128][5];
  15. int lens[128];
  16. } t2m;
  17.  
  18. memset(t2m.chrs, 0, sizeof(t2m.chrs));
  19.  
  20. t2m.chrs['A'][0] = 'a';
  21. strcpy(t2m.chrs['A'], ".-");
  22. t2m.lens['A'] = strlen(t2m.chrs['A']);
  23. strcpy(t2m.chrs['B'], "-...");
  24. t2m.lens['B'] = strlen(t2m.chrs['B']);
  25. strcpy(t2m.chrs['C'], "-.-.");
  26. t2m.lens['C'] = strlen(t2m.chrs['C']);
  27. strcpy(t2m.chrs['D'], "-..");
  28. t2m.lens['D'] = strlen(t2m.chrs['D']);
  29. strcpy(t2m.chrs['E'], ".");
  30. t2m.lens['E'] = strlen(t2m.chrs['E']);
  31. strcpy(t2m.chrs['F'], "..-.");
  32. t2m.lens['F'] = strlen(t2m.chrs['F']);
  33. strcpy(t2m.chrs['G'], "--.");
  34. t2m.lens['G'] = strlen(t2m.chrs['G']);
  35. strcpy(t2m.chrs['H'], "....");
  36. t2m.lens['H'] = strlen(t2m.chrs['H']);
  37. strcpy(t2m.chrs['I'], "..");
  38. t2m.lens['I'] = strlen(t2m.chrs['I']);
  39. strcpy(t2m.chrs['J'], ".---");
  40. t2m.lens['J'] = strlen(t2m.chrs['J']);
  41. strcpy(t2m.chrs['K'], "-.-");
  42. t2m.lens['K'] = strlen(t2m.chrs['K']);
  43. strcpy(t2m.chrs['L'], ".-..");
  44. t2m.lens['L'] = strlen(t2m.chrs['L']);
  45. strcpy(t2m.chrs['M'], "--");
  46. t2m.lens['M'] = strlen(t2m.chrs['M']);
  47. strcpy(t2m.chrs['N'], "-.");
  48. t2m.lens['N'] = strlen(t2m.chrs['N']);
  49. strcpy(t2m.chrs['O'], "---");
  50. t2m.lens['O'] = strlen(t2m.chrs['O']);
  51. strcpy(t2m.chrs['P'], ".--.");
  52. t2m.lens['P'] = strlen(t2m.chrs['P']);
  53. strcpy(t2m.chrs['Q'], "--.-");
  54. t2m.lens['Q'] = strlen(t2m.chrs['Q']);
  55. strcpy(t2m.chrs['R'], ".-.");
  56. t2m.lens['R'] = strlen(t2m.chrs['R']);
  57. strcpy(t2m.chrs['S'], "...");
  58. t2m.lens['S'] = strlen(t2m.chrs['S']);
  59. strcpy(t2m.chrs['T'], "-");
  60. t2m.lens['T'] = strlen(t2m.chrs['T']);
  61. strcpy(t2m.chrs['U'], "..-");
  62. t2m.lens['U'] = strlen(t2m.chrs['U']);
  63. strcpy(t2m.chrs['V'], "...-");
  64. t2m.lens['V'] = strlen(t2m.chrs['V']);
  65. strcpy(t2m.chrs['W'], ".--");
  66. t2m.lens['W'] = strlen(t2m.chrs['W']);
  67. strcpy(t2m.chrs['X'], "-..-");
  68. t2m.lens['X'] = strlen(t2m.chrs['X']);
  69. strcpy(t2m.chrs['Y'], "-.--");
  70. t2m.lens['Y'] = strlen(t2m.chrs['Y']);
  71. strcpy(t2m.chrs['Z'], "--..");
  72. t2m.lens['Z'] = strlen(t2m.chrs['Z']);
  73. strcpy(t2m.chrs['_'], "..--");
  74. t2m.lens['_'] = strlen(t2m.chrs['_']);
  75. strcpy(t2m.chrs['.'], "---.");
  76. t2m.lens['.'] = strlen(t2m.chrs['.']);
  77. strcpy(t2m.chrs[','], ".-.-");
  78. t2m.lens[','] = strlen(t2m.chrs['.']);
  79. strcpy(t2m.chrs['?'], "----");
  80. t2m.lens['?'] = strlen(t2m.chrs['.']);
  81.  
  82. char m2t [47][47][47][47];
  83. m2t['.']['-'][0][0] = 'A';
  84. m2t['-']['.']['.']['.'] = 'B';
  85. m2t['-']['.']['-']['.'] = 'C';
  86. m2t['-']['.']['.'][0] = 'D';
  87. m2t['.'][0][0][0] = 'E';
  88. m2t['.']['.']['-']['.'] = 'F';
  89. m2t['-']['-']['.'][0] = 'G';
  90. m2t['.']['.']['.']['.'] = 'H';
  91. m2t['.']['.'][0][0] = 'I';
  92. m2t['.']['-']['-']['-'] = 'J';
  93. m2t['-']['.']['-'][0] = 'K';
  94. m2t['.']['-']['.']['.'] = 'L';
  95. m2t['-']['-'][0][0] = 'M';
  96. m2t['-']['.'][0][0] = 'N';
  97. m2t['-']['-']['-'][0] = 'O';
  98. m2t['.']['-']['-']['.'] = 'P';
  99. m2t['-']['-']['.']['-'] = 'Q';
  100. m2t['.']['-']['.'][0] = 'R';
  101. m2t['.']['.']['.'][0] = 'S';
  102. m2t['-'][0][0][0] = 'T';
  103. m2t['.']['.']['-'][0] = 'U';
  104. m2t['.']['.']['.']['-'] = 'V';
  105. m2t['.']['-']['-'][0] = 'W';
  106. m2t['-']['.']['.']['-'] = 'X';
  107. m2t['-']['.']['-']['-'] = 'Y';
  108. m2t['-']['-']['.']['.'] = 'Z';
  109. m2t['.']['.']['-']['-'] = '_';
  110. m2t['-']['-']['-']['.'] = '.';
  111. m2t['.']['-']['.']['-'] = ',';
  112. m2t['-']['-']['-']['-'] = '?';
  113.  
  114. while (fgets(message, sizeof(message), stdin)) {
  115. string morse;
  116. int len = strlen(message) - 1;
  117. for (int i = 0; i < len; i++) {
  118. morse.append(t2m.chrs[message[i]]);
  119. lens[i] = t2m.lens[message[i]];
  120. }
  121.  
  122. int *s, *e;
  123. s = lens;
  124. e = lens + len - 1;
  125.  
  126. while (s < e) {
  127. int help = *s;
  128. *s = *e;
  129. *e = help;
  130. s++;
  131. e--;
  132. }
  133.  
  134. for (int i = 0, j = 0; j < len; i++, j++) {
  135. switch (lens[j]) {
  136. case 1:
  137. putchar(m2t[morse[i]][0][0][0]);
  138. break;
  139. case 2:
  140. putchar(m2t[morse[i]][morse[i + 1]][0][0]);
  141. i++;
  142. break;
  143. case 3:
  144. putchar(m2t[morse[i]][morse[i + 1]][morse[i + 2]][0]);
  145. i += 2;
  146. break;
  147. case 4:
  148. putchar(m2t[morse[i]][morse[i + 1]][morse[i + 2]][morse[i + 3]]);
  149. i += 3;
  150. break;
  151. }
  152. }
  153.  
  154. putchar('\n');
  155. }
  156.  
  157. return 0;
  158. }
  159.