Source code for submission s615

Go to diff to previous submission

fs.cpp

  1.  
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. int morsetoint(const char *a) {
  10. int out = 0;
  11. for (const char *c = a; *c; c++) {
  12. out <<= 1;
  13. out |= *c == '-';
  14. }
  15. return out;
  16. }
  17.  
  18. int morsetoint(const char *a, int l) {
  19. int out = 0;
  20. for (const char *c = a; l--; c++) {
  21. out <<= 1;
  22. out |= *c == '-';
  23. }
  24. return out;
  25. }
  26.  
  27. int chartomorse[256];
  28. int chartolen[256];
  29. const char *chartomcode[256];
  30.  
  31. char morsetochar[5][16];
  32. const char *morsetomcode[5][16];
  33.  
  34. #define m(a,b) { chartomorse[a] = morsetoint(b); chartomcode[a] = b; chartolen[a] = strlen(b); morsetochar[strlen(b)][morsetoint(b)] = a; morsetomcode[strlen(b)][morsetoint(b)] = b; }
  35.  
  36. int tlen;
  37. char input[1024];
  38. int incodes[1024];
  39. int inlens[1024];
  40. char morse[4096];
  41. int outcodes[1024];
  42. int outlens[1024];
  43. char output[1024];
  44.  
  45. int main() {
  46.  
  47. m('A', ".-")
  48. m('B', "-...")
  49. m('C', "-.-.")
  50. m('D', "-..")
  51. m('E', ".")
  52. m('F', "..-.")
  53. m('G', "--.")
  54. m('H', "....")
  55. m('I', "..")
  56. m('J', ".---")
  57. m('K', "-.-")
  58. m('L', ".-..")
  59. m('M', "--")
  60. m('N', "-.")
  61. m('O', "---")
  62. m('P', ".--.")
  63. m('Q', "--.-")
  64. m('R', ".-.")
  65. m('S', "...")
  66. m('T', "-")
  67. m('U', "..-")
  68. m('V', "...-")
  69. m('W', ".--")
  70. m('X', "-..-")
  71. m('Y', "-.--")
  72. m('Z', "--..")
  73. m('_', "..--")
  74. m(',', ".-.-")
  75. m('.', "---.")
  76. m('?', "----")
  77.  
  78. do {
  79. char cur = getchar();
  80. if (cur < '\n') break;
  81. tlen = 0;
  82. while (cur != '\n') {
  83. input[tlen++] = cur;
  84. cur = getchar();
  85. }
  86. if (!tlen) break;
  87. input[tlen] = 0;
  88. // vstup nacten
  89. for (int i = 0; i < tlen; i++) {
  90. incodes[i] = chartomorse[input[i]];
  91. inlens[i] = chartolen[input[i]];
  92. }
  93. // build morse string
  94. char *tar = morse;
  95. for (int i = 0; i < tlen; i++) {
  96. //printf("%s ", chartomcode[input[i]]);
  97. const char *cd = chartomcode[input[i]];
  98. for (; *cd; cd++)
  99. *(tar++) = *cd;
  100. //tar = strcpy(tar, chartomcode[input[i]]);
  101. }
  102. *tar = 0;
  103. //printf("\n%s\n", morse);
  104. // flip lens
  105. for (int i = 0; i < tlen; i++) {
  106. outlens[i] = inlens[tlen-i-1];
  107. }
  108. // decode new morse
  109. const char *src = morse;
  110. for (int i = 0; i < tlen; i++) {
  111. outcodes[i] = morsetoint(src, outlens[i]);
  112. src += outlens[i];
  113. }
  114. // build output
  115. for (int i = 0; i < tlen; i++) {
  116. output[i] = morsetochar[outlens[i]][outcodes[i]];
  117. }
  118. output[tlen] = 0;
  119. printf("%s\n", output);
  120. } while (true);
  121. return 0;
  122. }
  123.  

Diff to submission s594

fs.cpp

--- c5.s594.cteam033.fs.cpp.0.fs.cpp
+++ c5.s615.cteam033.fs.cpp.0.fs.cpp
@@ -29,6 +29,6 @@
 const char *chartomcode[256];
 
-char morsetochar[4][16];
-const char *morsetomcode[4][16];
+char morsetochar[5][16];
+const char *morsetomcode[5][16];
 
 #define m(a,b) { chartomorse[a] = morsetoint(b); chartomcode[a] = b; chartolen[a] = strlen(b); morsetochar[strlen(b)][morsetoint(b)] = a; morsetomcode[strlen(b)][morsetoint(b)] = b; }
@@ -84,4 +84,5 @@
                         cur = getchar();
                 }
+                if (!tlen) break;
                 input[tlen] = 0;
                 // vstup nacten