Source code for submission s659

fs.cpp

  1. #include <iostream>
  2.  
  3. #include <string>
  4.  
  5. #include <queue>
  6. #include <stack>
  7.  
  8. using namespace std;
  9.  
  10. int STATE;
  11.  
  12. void nextState ( char c )
  13. {
  14. switch ( c ) {
  15. case '.': STATE = STATE * 2 + 1; break;
  16. case '-': STATE = STATE * 2 + 2; break;
  17. }
  18. }
  19.  
  20. char getCharFromState ( void )
  21. {
  22. switch ( STATE ) {
  23. case 1: return 'E'; break;
  24. case 2: return 'T'; break;
  25. case 3: return 'I'; break;
  26. case 4: return 'A'; break;
  27. case 5: return 'N'; break;
  28. case 6: return 'M'; break;
  29. case 7: return 'S'; break;
  30. case 8: return 'U'; break;
  31. case 9: return 'R'; break;
  32. case 10: return 'W'; break;
  33. case 11: return 'D'; break;
  34. case 12: return 'K'; break;
  35. case 13: return 'G'; break;
  36. case 14: return 'O'; break;
  37. case 15: return 'H'; break;
  38. case 16: return 'V'; break;
  39. case 17: return 'F'; break;
  40. case 18: return '_'; break;
  41. case 19: return 'L'; break;
  42. case 20: return ','; break;
  43. case 21: return 'P'; break;
  44. case 22: return 'J'; break;
  45. case 23: return 'B'; break;
  46. case 24: return 'X'; break;
  47. case 25: return 'C'; break;
  48. case 26: return 'Y'; break;
  49. case 27: return 'Z'; break;
  50. case 28: return 'Q'; break;
  51. case 29: return '.'; break;
  52. case 30: return '?'; break;
  53. }
  54. return '#';
  55. }
  56.  
  57. char morseToAscii ( queue<char> & str, int num )
  58. {
  59. STATE = 0;
  60. for ( int i = 0; i < num; i++ ) {
  61. nextState(str.front()); str.pop();
  62. }
  63.  
  64. return getCharFromState();
  65. }
  66.  
  67. void asciiToMorse ( queue<char> & str, stack<int> & nums, char c )
  68. {
  69. switch ( c ) {
  70. case 'A': str.push('.'); str.push('-'); nums.push(2);
  71. break;
  72. case 'B': str.push('-'); str.push('.'); str.push('.'); str.push('.'); nums.push(4);
  73. break;
  74. case 'C': str.push('-'); str.push('.'); str.push('-'); str.push('.'); nums.push(4);
  75. break;
  76. case 'D': str.push('-'); str.push('.'); str.push('.'); nums.push(3);
  77. break;
  78. case 'E': str.push('.'); nums.push(1);
  79. break;
  80. case 'F': str.push('.'); str.push('.'); str.push('-'); str.push('.'); nums.push(4);
  81. break;
  82. case 'G': str.push('-'); str.push('-'); str.push('.'); nums.push(3);
  83. break;
  84. case 'H': str.push('.'); str.push('.'); str.push('.'); str.push('.'); nums.push(4);
  85. break;
  86. case 'I': str.push('.'); str.push('.'); nums.push(2);
  87. break;
  88. case 'J': str.push('.'); str.push('-'); str.push('-'); str.push('-'); nums.push(4);
  89. break;
  90. case 'K': str.push('-'); str.push('.'); str.push('-'); nums.push(3);
  91. break;
  92. case 'L': str.push('.'); str.push('-'); str.push('.'); str.push('.'); nums.push(4);
  93. break;
  94. case 'M': str.push('-'); str.push('-'); nums.push(2);
  95. break;
  96. case 'N': str.push('-'); str.push('.'); nums.push(2);
  97. break;
  98. case 'O': str.push('-'); str.push('-'); str.push('-'); nums.push(3);
  99. break;
  100. case 'P': str.push('.'); str.push('-'); str.push('-'); str.push('.'); nums.push(4);
  101. break;
  102. case 'Q': str.push('-'); str.push('-'); str.push('.'); str.push('-'); nums.push(4);
  103. break;
  104. case 'R': str.push('.'); str.push('-'); str.push('.'); nums.push(3);
  105. break;
  106. case 'S': str.push('.'); str.push('.'); str.push('.'); nums.push(3);
  107. break;
  108. case 'T': str.push('-'); nums.push(1);
  109. break;
  110. case 'U': str.push('.'); str.push('.'); str.push('-'); nums.push(3);
  111. break;
  112. case 'V': str.push('.'); str.push('.'); str.push('.'); str.push('-'); nums.push(4);
  113. break;
  114. case 'W': str.push('.'); str.push('-'); str.push('-'); nums.push(3);
  115. break;
  116. case 'X': str.push('-'); str.push('.'); str.push('.'); str.push('-'); nums.push(4);
  117. break;
  118. case 'Y': str.push('-'); str.push('.'); str.push('-'); str.push('-'); nums.push(4);
  119. break;
  120. case 'Z': str.push('-'); str.push('-'); str.push('.'); str.push('.'); nums.push(4);
  121. break;
  122. case '_': str.push('.'); str.push('.'); str.push('-'); str.push('-'); nums.push(4);
  123. break;
  124. case ',': str.push('.'); str.push('-'); str.push('.'); str.push('-'); nums.push(4);
  125. break;
  126. case '.': str.push('-'); str.push('-'); str.push('-'); str.push('.'); nums.push(4);
  127. break;
  128. case '?': str.push('-'); str.push('-'); str.push('-'); str.push('-'); nums.push(4);
  129. break;
  130. }
  131. }
  132.  
  133. int main ( void )
  134. {
  135. string line;
  136.  
  137. while ( getline(cin, line) && line.size() != 0 ) {
  138. queue<char> str; stack<int> nums;
  139.  
  140. int lenLine = line.size();
  141. for ( int i = 0; i < lenLine; i++ ) {
  142. asciiToMorse( str, nums, line[ i ] );
  143. }
  144.  
  145. int lenNums = nums.size();
  146. for ( int i = 0; i < lenNums; i++ ) {
  147. cout << morseToAscii ( str, nums.top() );
  148. nums.pop();
  149. }
  150. cout << endl;
  151. }
  152.  
  153. return 0;
  154. }
  155.  
  156.