Source code for submission s536

fs.cpp

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <map>
  5.  
  6. int main() {
  7. const char *code[256] = { };
  8. code['A'] = ".-";
  9. code['B'] = "-...";
  10. code['C'] = "-.-.";
  11. code['D'] = "-..";
  12. code['E'] = ".";
  13. code['F'] = "..-.";
  14. code['G'] = "--.";
  15. code['H'] = "....";
  16. code['I'] = "..";
  17. code['J'] = ".---";
  18. code['K'] = "-.-";
  19. code['L'] = ".-..";
  20. code['M'] = "--";
  21. code['N'] = "-.";
  22. code['O'] = "---";
  23. code['P'] = ".--.";
  24. code['Q'] = "--.-";
  25. code['R'] = ".-.";
  26. code['S'] = "...";
  27. code['T'] = "-";
  28. code['U'] = "..-";
  29. code['V'] = "...-";
  30. code['W'] = ".--";
  31. code['X'] = "-..-";
  32. code['Y'] = "-.--";
  33. code['Z'] = "--..";
  34. code['_'] = "..--";
  35. code[','] = ".-.-";
  36. code['.'] = "---.";
  37. code['?'] = "----";
  38.  
  39. unsigned int codelens[256] = { };
  40. std::map<std::string, char> revcode;
  41. for (unsigned int i = 0; i < 256; i++)
  42. if (code[i])
  43. {
  44. codelens[i] = strlen(code[i]);
  45. revcode[code[i]] = (char)i;
  46. }
  47.  
  48. char morse[5000], result[1250];
  49. unsigned int lens[1250];
  50.  
  51. while (true)
  52. {
  53. std::string line;
  54. getline(std::cin, line);
  55. if (std::cin.fail())
  56. break;
  57.  
  58. unsigned int mp = 0;
  59. for (unsigned int p = 0; p < line.size(); p++)
  60. {
  61. char c = line[p];
  62. lens[p] = codelens[c];
  63. for (unsigned int pp = 0; pp < lens[p]; pp++)
  64. morse[mp++] = code[c][pp];
  65. }
  66.  
  67. mp = 0;
  68. unsigned int rp = 0;
  69. for (int p = line.size() - 1; p >= 0; p--)
  70. {
  71. std::string enc;
  72. for (unsigned int pp = 0; pp < lens[p]; pp++)
  73. enc.push_back(morse[mp++]);
  74. if (revcode.count(enc) == 0)
  75. std::cerr << "lol:" << enc << std::endl;
  76. result[rp++] = revcode[enc];
  77. }
  78. result[rp++] = '\0';
  79.  
  80. std::cout << result << std::endl;
  81. }
  82. return 0;
  83. }
  84.