Source code for submission s455

fs.cpp

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <utility>
  7. #include <string>
  8. #include <deque>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <stack>
  14. #include <vector>
  15. using namespace std;
  16.  
  17. //#define debug printf
  18. #define debug blackhole
  19. void blackhole(...) {}
  20.  
  21. char* morse[] = {
  22. "A", ".-", "B", "-...", "C", "-.-.", "D", "-..", "E", ".",
  23. "F", "..-.", "G", "--.", "H", "....", "I", "..", "J", ".---",
  24. "K", "-.-", "L", ".-..", "M", "--", "N", "-.", "O", "---",
  25. "P", ".--.", "Q", "--.-", "R", ".-.", "S", "...", "T", "-",
  26. "U", "..-", "V", "...-", "W", ".--", "X", "-..-", "Y", "-.--", "Z", "--..", "_", "..--", ",", ".-.-", ".", "---.", "?", "----",
  27. NULL
  28. };
  29.  
  30. char into[10000];
  31. char input[10000];
  32. char output[10000];
  33. int lengths_n;
  34. int lengths[10000];
  35.  
  36. void go_into() {
  37. int j = 0;
  38. for (int i = 0; input[i]; i++) {
  39. int k;
  40. for (k = 0; morse[2*k]; k++) {
  41. if (morse[2*k][0] == input[i]) {
  42. break;
  43. }
  44. }
  45. if (!morse[2*k]) { printf("ERROR (failed to find %c)", input[i]); exit(2); }
  46. for (int kk = 0; morse[2*k+1][kk]; kk++) {
  47. into[j++] = morse[2*k+1][kk];
  48. }
  49. }
  50. into[j++] = '\0';
  51. lengths_n = 0;
  52. for (int i = 0; input[i]; i++) {
  53. int k;
  54. for (k = 0; morse[2*k]; k++) {
  55. if (morse[2*k][0] == input[i]) {
  56. break;
  57. }
  58. }
  59. if (!morse[2*k]) { printf("ERROR"); exit(2); }
  60. lengths[lengths_n++] = strlen(morse[2*k+1]);
  61. }
  62.  
  63. debug("lengths:");
  64. for (int qq = 0; qq < lengths_n; qq++) {
  65. debug("%d", lengths[qq]);
  66. }
  67. debug("\n");
  68. }
  69.  
  70. void go_from() {
  71. debug("into: %s", into);
  72. int j = 0, ol=0;
  73. for (int k = 0; k < lengths_n; k++) {
  74. int length = lengths[lengths_n - k - 1];
  75. char mor[100];
  76. int l;
  77. for (l = 0; l < length; l++) {
  78. mor[l] = into[j++];
  79. }
  80. mor[l] = '\0';
  81.  
  82. for (l = 0; morse[2*l]; l++) {
  83. if (strcmp(morse[2*l+1], mor) == 0) {
  84. break;
  85. }
  86. }
  87. if (!morse[2*l]) { printf("ERROR not found %s", mor); exit(2); }
  88.  
  89. output[ol++] = morse[2*l][0];
  90. }
  91. output[ol++]='\0';
  92. }
  93.  
  94. int main() {
  95. do {
  96. if (scanf("%s", input) != 1) break;
  97. go_into();
  98. go_from();
  99. printf("%s\n", output);
  100. } while (true);
  101. return 0;
  102. }
  103.