Skip to content

Instantly share code, notes, and snippets.

@moehuster
Created March 14, 2014 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moehuster/9550947 to your computer and use it in GitHub Desktop.
Save moehuster/9550947 to your computer and use it in GitHub Desktop.
// http://poj.org/problem?id=1051
#include <stdio.h>
#include <string.h>
char hash[32][6]={{".-"},{"-..."},{"-.-."},{"-.."},{"."},{"..-."},{"--."},
{"...."},{".."},{".---"},{"-.-"},{".-.."},{"--"},{"-."},
{"---"},{".--."},{"--.-"},{".-."},{"..."},{"-"},{"..-"},
{"...-"},{".--"},{"-..-"},{"-.--"},{"--.."},{"..--"},{".-.-"},
{"---."},{"----"}};
int len[32]={2,4,4,3,1,4,3,4,2,4,3,4,2,2,3,4,4,3,3,1,3,4,3,4,4,4,4,4,4,4};
int main()
{
char str[512];
int i,j,k,n,num[128];
scanf("%d",&n); getchar();
for (i=0; i<n; i++) {
char ch,buf[6],*p=str;
int count=0;
memset(str,0,512);
while ((ch=getchar())!='\n') {
num[count] = 4;
if (ch>='A' && ch <='Z') {
strcat(str,hash[ch-'A']);
num[count] = len[ch-'A'];
}
else if (ch=='_') strcat(str,hash[26]);
else if (ch==',') strcat(str,hash[27]);
else if (ch=='.') strcat(str,hash[28]);
else if (ch=='?') strcat(str,hash[29]);
count++;
}
printf ( "%d: ",i+1 );
for (j=count-1; j>=0; j--) {
strncpy(buf,p,num[j]);
buf[num[j]] = '\0';
for (k=0; k<30; k++)
if (!strcmp(buf,hash[k])) {
if (k<26) putchar(k+'A');
else if (k==26) putchar('_');
else if (k==27) putchar(',');
else if (k==28) putchar('.');
else if (k==29) putchar('?');
break;
}
p += num[j];
}
printf ( "\n" );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment