Source code for submission s570

fs.cpp

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <map>
  4. #include <vector>
  5. #include <string>
  6. using namespace std;
  7.  
  8. map<string, char> mcToChar;
  9. map<char, string> charToMc;
  10.  
  11. void initMaps() {
  12. mcToChar.insert(make_pair(".-", 'A'));
  13. mcToChar.insert(make_pair("-...", 'B'));
  14. mcToChar.insert(make_pair("-.-.", 'C'));
  15. mcToChar.insert(make_pair("-..", 'D'));
  16. mcToChar.insert(make_pair(".", 'E'));
  17. mcToChar.insert(make_pair("..-.", 'F'));
  18. mcToChar.insert(make_pair("--.", 'G'));
  19. mcToChar.insert(make_pair("....", 'H'));
  20. mcToChar.insert(make_pair("..", 'I'));
  21. mcToChar.insert(make_pair(".---", 'J'));
  22. mcToChar.insert(make_pair("-.-", 'K'));
  23. mcToChar.insert(make_pair(".-..", 'L'));
  24. mcToChar.insert(make_pair("--", 'M'));
  25. mcToChar.insert(make_pair("-.", 'N'));
  26. mcToChar.insert(make_pair("---", 'O'));
  27. mcToChar.insert(make_pair(".--.", 'P'));
  28. mcToChar.insert(make_pair("--.-", 'Q'));
  29. mcToChar.insert(make_pair(".-.", 'R'));
  30. mcToChar.insert(make_pair("...", 'S'));
  31. mcToChar.insert(make_pair("-", 'T'));
  32. mcToChar.insert(make_pair("..-", 'U'));
  33. mcToChar.insert(make_pair("...-", 'V'));
  34. mcToChar.insert(make_pair(".--", 'W'));
  35. mcToChar.insert(make_pair("-..-", 'X'));
  36. mcToChar.insert(make_pair("-.--", 'Y'));
  37. mcToChar.insert(make_pair("--..", 'Z'));
  38. mcToChar.insert(make_pair("..--", '_'));
  39. mcToChar.insert(make_pair(".-.-", ','));
  40. mcToChar.insert(make_pair("---.", '.'));
  41. mcToChar.insert(make_pair("----", '?'));
  42.  
  43.  
  44. charToMc.insert(make_pair('A', ".-"));
  45. charToMc.insert(make_pair('B', "-..."));
  46. charToMc.insert(make_pair('C', "-.-."));
  47. charToMc.insert(make_pair('D', "-.."));
  48. charToMc.insert(make_pair('E', "."));
  49. charToMc.insert(make_pair('F', "..-."));
  50. charToMc.insert(make_pair('G', "--."));
  51. charToMc.insert(make_pair('H', "...."));
  52. charToMc.insert(make_pair('I', ".."));
  53. charToMc.insert(make_pair('J', ".---"));
  54. charToMc.insert(make_pair('K', "-.-"));
  55. charToMc.insert(make_pair('L', ".-.."));
  56. charToMc.insert(make_pair('M', "--"));
  57. charToMc.insert(make_pair('N', "-."));
  58. charToMc.insert(make_pair('O', "---"));
  59. charToMc.insert(make_pair('P', ".--."));
  60. charToMc.insert(make_pair('Q', "--.-"));
  61. charToMc.insert(make_pair('R', ".-."));
  62. charToMc.insert(make_pair('S', "..."));
  63. charToMc.insert(make_pair('T', "-"));
  64. charToMc.insert(make_pair('U', "..-"));
  65. charToMc.insert(make_pair('V', "...-"));
  66. charToMc.insert(make_pair('W', ".--"));
  67. charToMc.insert(make_pair('X', "-..-"));
  68. charToMc.insert(make_pair('Y', "-.--"));
  69. charToMc.insert(make_pair('Z', "--.."));
  70. charToMc.insert(make_pair('_', "..--"));
  71. charToMc.insert(make_pair(',', ".-.-"));
  72. charToMc.insert(make_pair('.', "---."));
  73. charToMc.insert(make_pair('?', "----"));
  74. }
  75.  
  76. string getMorseCode(char a) {
  77. map<char, string>::iterator it = charToMc.find(a);
  78. return it->second;
  79. }
  80.  
  81. char getLetter(string m) {
  82. map<string, char>::iterator it = mcToChar.find(m);
  83. return it->second;
  84. }
  85.  
  86. void revertNumbers(vector<int> & numbers) {
  87. int i = 0, j = numbers.size() - 1;
  88.  
  89. while (i < j) {
  90. int a = numbers[i];
  91. numbers[i] = numbers[j];
  92. numbers[j] = a;
  93. i++;
  94. j--;
  95. }
  96. }
  97.  
  98. int main() {
  99. initMaps();
  100.  
  101. string input;
  102. while (cin >> input) {
  103.  
  104. string morseCode = "";
  105. vector<int> numbers;
  106. string output = "";
  107.  
  108. for(unsigned i = 0; i < input.length(); i++){
  109. string buff = getMorseCode(input[i]);
  110. morseCode.append( buff );
  111. numbers.push_back(buff.length());
  112. }
  113.  
  114. revertNumbers(numbers);
  115.  
  116. int j = 0;
  117. unsigned i = 0;
  118. while (i < morseCode.length()){
  119. output.push_back(getLetter(morseCode.substr(i, numbers[j])));
  120. i += numbers[j];
  121. j++;
  122. }
  123.  
  124. cout << output << endl;
  125. }
  126.  
  127. return 0;
  128. }
  129.