Source code for submission s503

security.cpp

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <map>
  4. #include <string>
  5. #include <iostream>
  6. #include <queue>
  7. #include <stack>
  8.  
  9. using namespace std;
  10.  
  11. map<char,string> ctm;
  12. map<string,char> mtc;
  13.  
  14. void init(){
  15. ctm.insert(make_pair<char,string>('A',".-"));
  16. ctm.insert(make_pair<char,string>('B',"-..."));
  17. ctm.insert(make_pair<char,string>('C',"-.-."));
  18. ctm.insert(make_pair<char,string>('D',"-.."));
  19. ctm.insert(make_pair<char,string>('E',"."));
  20. ctm.insert(make_pair<char,string>('F',"..-."));
  21. ctm.insert(make_pair<char,string>('G',"--."));
  22. ctm.insert(make_pair<char,string>('H',"...."));
  23. ctm.insert(make_pair<char,string>('I',".."));
  24. ctm.insert(make_pair<char,string>('J',".---"));
  25. ctm.insert(make_pair<char,string>('K',"-.-"));
  26. ctm.insert(make_pair<char,string>('L',".-.."));
  27. ctm.insert(make_pair<char,string>('M',"--"));
  28. ctm.insert(make_pair<char,string>('N',"-."));
  29. ctm.insert(make_pair<char,string>('O',"---"));
  30. ctm.insert(make_pair<char,string>('P',".--."));
  31. ctm.insert(make_pair<char,string>('Q',"--.-"));
  32. ctm.insert(make_pair<char,string>('R',".-."));
  33. ctm.insert(make_pair<char,string>('S',"..."));
  34. ctm.insert(make_pair<char,string>('T',"-"));
  35. ctm.insert(make_pair<char,string>('U',"..-"));
  36. ctm.insert(make_pair<char,string>('V',"...-"));
  37. ctm.insert(make_pair<char,string>('W',".--"));
  38. ctm.insert(make_pair<char,string>('X',"-..-"));
  39. ctm.insert(make_pair<char,string>('Y',"-.--"));
  40. ctm.insert(make_pair<char,string>('Z',"--.."));
  41. ctm.insert(make_pair<char,string>('_',"..--"));
  42. ctm.insert(make_pair<char,string>(',',".-.-"));
  43. ctm.insert(make_pair<char,string>('.',"---."));
  44. ctm.insert(make_pair<char,string>('?',"----"));
  45.  
  46. for( map<char,string>::iterator it = ctm.begin(); it != ctm.end(); it++ ){
  47. mtc.insert(make_pair<string,char>(it->second,it->first));
  48. }
  49. }
  50.  
  51. void decode( const string & line ){
  52. string morse;
  53. stack<int> s;
  54. //cout << line << endl;
  55. for( size_t i = 0; i < line.size(); i++ ){
  56. string & tmp = ctm[line[i]];
  57. morse+=tmp;
  58. // cout << tmp << " ";
  59. s.push(tmp.size());
  60. }
  61. //cout << endl;
  62. //cerr << morse << endl;
  63. int pos = 0;
  64. while(!s.empty()){
  65. //cout << pos << endl;
  66. int l = s.top(); s.pop();
  67. // cout << morse.substr(pos,l) << " ";
  68. putchar(mtc[morse.substr(pos,l)]);
  69. pos+=l;
  70. }
  71. putchar('\n');
  72. }
  73.  
  74. int main( int argc, char ** argv ){
  75. init();
  76. string line;
  77. while( getline(cin,line) ){
  78. decode(line);
  79. }
  80. return 0;
  81. }
  82.