Source code for submission s938

fs.cpp

  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. string decodeMorse(string morse) {
  8. if (morse[0] == '.') {
  9. if (morse.length() == 1) {
  10. return "E";
  11. }
  12.  
  13. if (morse[1] == '.') {
  14. if (morse.length() == 2) {
  15. return "I";
  16. }
  17.  
  18. if (morse[2] == '.') {
  19. if (morse.length() == 3) {
  20. return "S";
  21. }
  22.  
  23. if (morse[3] == '.') {
  24. return "H";
  25. } else {
  26. return "V";
  27. }
  28. } else {
  29. if (morse.length() == 3) {
  30. return "U";
  31. }
  32.  
  33. if (morse[3] == '.') {
  34. return "F";
  35. } else {
  36. return "_";
  37. }
  38. }
  39. } else {
  40. if (morse.length() == 2) {
  41. return "A";
  42. }
  43.  
  44. if (morse[2] == '.') {
  45. if (morse.length() == 3) {
  46. return "R";
  47. }
  48.  
  49. if (morse[3] == '.') {
  50. return "L";
  51. } else {
  52. return ",";
  53. }
  54. } else {
  55. if (morse.length() == 3) {
  56. return "W";
  57. }
  58.  
  59. if (morse[3] == '.') {
  60. return "P";
  61. } else {
  62. return "J";
  63. }
  64. }
  65. }
  66. } else {
  67. if (morse.length() == 1) {
  68. return "T";
  69. }
  70.  
  71. if (morse[1] == '.') {
  72. if (morse.length() == 2) {
  73. return "N";
  74. }
  75.  
  76. if (morse[2] == '.') {
  77. if (morse.length() == 3) {
  78. return "D";
  79. }
  80.  
  81. if (morse[3] == '.') {
  82. return "B";
  83. } else {
  84. return "X";
  85. }
  86. } else {
  87. if (morse.length() == 3) {
  88. return "K";
  89. }
  90.  
  91. if (morse[3] == '.') {
  92. return "C";
  93. } else {
  94. return "Y";
  95. }
  96. }
  97. } else {
  98. if (morse.length() == 2) {
  99. return "M";
  100. }
  101.  
  102. if (morse[2] == '.') {
  103. if (morse.length() == 3) {
  104. return "G";
  105. }
  106.  
  107. if (morse[3] == '.') {
  108. return "Z";
  109. } else {
  110. return "Q";
  111. }
  112. } else {
  113. if (morse.length() == 3) {
  114. return "O";
  115. }
  116.  
  117. if (morse[3] == '.') {
  118. return ".";
  119. } else {
  120. return "?";
  121. }
  122. }
  123. }
  124. }
  125. }
  126.  
  127. string decode(string morse, string lengths) {
  128. string ret;
  129. int currLen = 0;
  130.  
  131. for (string::size_type i = 0; i < lengths.length(); i++) {
  132. currLen = lengths[i] * 1;
  133.  
  134. ret += decodeMorse(morse.substr(0, currLen));
  135. morse = morse.substr(currLen, morse.length());
  136. }
  137.  
  138. return ret;
  139. }
  140.  
  141. int main(int argc, char** argv) {
  142. string vagner[100];
  143. string line;
  144.  
  145. vagner[65] = ".-";
  146. vagner[66] = "-...";
  147. vagner[67] = "-.-.";
  148. vagner[68] = "-..";
  149. vagner[69] = ".";
  150. vagner[70] = "..-.";
  151. vagner[71] = "--.";
  152. vagner[72] = "....";
  153. vagner[73] = "..";
  154. vagner[74] = ".---";
  155. vagner[75] = "-.-";
  156. vagner[76] = ".-..";
  157. vagner[77] = "--";
  158. vagner[78] = "-.";
  159. vagner[79] = "---";
  160. vagner[80] = ".--.";
  161. vagner[81] = "--.-";
  162. vagner[82] = ".-.";
  163. vagner[83] = "...";
  164. vagner[84] = "-";
  165. vagner[85] = "..-";
  166. vagner[86] = "...-";
  167. vagner[87] = ".--";
  168. vagner[88] = "-..-";
  169. vagner[89] = "-.--";
  170. vagner[90] = "--..";
  171. vagner[95] = "..--";
  172. vagner[44] = ".-.-";
  173. vagner[46] = "---.";
  174. vagner[63] = "----";
  175.  
  176. while(getline(cin, line)) {
  177. string morse;
  178. string lengths;
  179. string lengthsRev;
  180.  
  181. for(string::size_type i = 0; i < line.length(); i++) {
  182. char c = line[i];
  183.  
  184. string encoded = vagner[(int)c];
  185. morse += encoded;
  186. lengths += encoded.length();
  187. }
  188.  
  189. for(int i = lengths.length() - 1; i >= 0; i--) {
  190. lengthsRev += lengths[i];
  191. }
  192.  
  193. cout << decode(morse, lengthsRev) << endl;
  194. }
  195.  
  196.  
  197. return 0;
  198. }
  199.  
  200.