Go to diff to previous submission
#include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int morsetoint(const char *a) { int out = 0; for (const char *c = a; *c; c++) { out <<= 1; out |= *c == '-'; } return out; } int morsetoint(const char *a, int l) { int out = 0; for (const char *c = a; l--; c++) { out <<= 1; out |= *c == '-'; } return out; } int chartomorse[256]; int chartolen[256]; const char *chartomcode[256]; 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; } int tlen; char input[1024]; int incodes[1024]; int inlens[1024]; char morse[4096]; int outcodes[1024]; int outlens[1024]; char output[1024]; int main() { m('A', ".-") m('B', "-...") m('C', "-.-.") m('D', "-..") m('E', ".") m('F', "..-.") m('G', "--.") m('H', "....") m('I', "..") m('J', ".---") m('K', "-.-") m('L', ".-..") m('M', "--") m('N', "-.") m('O', "---") m('P', ".--.") m('Q', "--.-") m('R', ".-.") m('S', "...") m('T', "-") m('U', "..-") m('V', "...-") m('W', ".--") m('X', "-..-") m('Y', "-.--") m('Z', "--..") m('_', "..--") m(',', ".-.-") m('.', "---.") m('?', "----") do { char cur = getchar(); if (cur < '\n') break; tlen = 0; while (cur != '\n') { input[tlen++] = cur; cur = getchar(); } if (!tlen) break; input[tlen] = 0; // vstup nacten for (int i = 0; i < tlen; i++) { incodes[i] = chartomorse[input[i]]; inlens[i] = chartolen[input[i]]; } // build morse string char *tar = morse; for (int i = 0; i < tlen; i++) { //printf("%s ", chartomcode[input[i]]); const char *cd = chartomcode[input[i]]; for (; *cd; cd++) *(tar++) = *cd; //tar = strcpy(tar, chartomcode[input[i]]); } *tar = 0; //printf("\n%s\n", morse); // flip lens for (int i = 0; i < tlen; i++) { outlens[i] = inlens[tlen-i-1]; } // decode new morse const char *src = morse; for (int i = 0; i < tlen; i++) { outcodes[i] = morsetoint(src, outlens[i]); src += outlens[i]; } // build output for (int i = 0; i < tlen; i++) { output[i] = morsetochar[outlens[i]][outcodes[i]]; } output[tlen] = 0; printf("%s\n", output); } while (true); return 0; }
--- 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