Saturday 5 December 2015

Program to print all the possible translations of string of 'Morse Code'

Morse Code: An alphabet or code in which letters are represented by combinations of long(dah) and short(dit) light or sound signals.

Note: This program does not include Morse Code for numberic characters.

Problem Statement:
some researchers define an encoding scheme using an implementation of morse code. This scheme follows the following rule:
A = ._            N = _. B = _...          O = ___ C = _._.          P = .__. D = _..           Q = __._ E = .             R = ._. F = .._.          S = ... G = __.           T = _ H = ....          U = .._ I = ..            V = ..._ J = .___          W = .__ K = _._           X = _.._ L = ._..          Y = _.__ M = __            Z = __..
For example, ".__..__._..._" is the word "PANDA". Unfortunately, this sequence also spells 'ADGBT', 'PAKV', 'WUNBT', 'WUNNIT', 'WUNNU', etc., along with many others. To solve this problem, your friend asks you to find a solution while he works on developing his own programming language.
Input
The input will be a string of morse code.
Output
As output, print all of the possible translations, separated by new lines, in alphabetical order.
Example
STDIN
.__..__._..._
STDOUT:
ADGBT ADGDA ..... ADGNEET ... WUTLET .... WUTRIT WUTRU
"..." shows there are more such words in between

Solution:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

char buffer[26];
int l=0;
 char *Morse[26];
//initializing Morse Code array
void initMorse(){
    Morse[0] = "._" ;            
    Morse[1] = "_...";            
    Morse[2] = "_._." ;            
    Morse[3] = "_.." ;            
    Morse[4] = "." ;   //E         
    Morse[5] = ".._." ;            
    Morse[6] = "__." ;            
    Morse[7] = "...." ;  //H          
    Morse[8] = ".." ;       //I     
    Morse[9] = ".___" ;   //J         
    Morse[10] = "_._" ;  //K            
    Morse[11] = "._.." ;            
    Morse[12] = "__" ;   //M         
    Morse[13] = "_." ;            
    Morse[14] = "___" ;     //O       
    Morse[15] = ".__." ;  //P            
    Morse[16] = "__._" ;            
    Morse[17] = "._." ;   //R         
    Morse[18] = "..." ;            
    Morse[19] = "_" ;            
    Morse[20] = ".._" ;            
    Morse[21] = "..._" ;  //V          
    Morse[22] = ".__" ;            
    Morse[23] = "_.._" ;            
    Morse[24] = "_.__" ;            
    Morse[25] = "__.." ; //Z
}
int solution(char *s,int strt,char **Morse,int len){
    int i,j,noMatch=0,k,prev,tem;
    int mlen;
    if(strt!=len)
    for(i=0;i<26;i++){
        mlen=strlen(Morse[i]);
     if(strt+mlen<=len){
            for(j=strt,k=0;j<strt+mlen&&k<mlen;j++,k++){
                if(Morse[i][k]==s[j])
                    continue;
                else {
                    noMatch=1;
                    break;
                }
            }
        }
        else{
            continue;   
        }
        if(noMatch==0){
             //print pattern when complete string matched
             if(strt+mlen==len){
              buffer[l]=i+65;
                 printf("%s\n",buffer);
                 buffer[l]=0;
            }
            else{
                noMatch=0;  
                buffer[l]=i+65;
                l++;
                solution(s,strt+mlen,Morse,len);
                l--;                 // while backtracking 
                buffer[l]=0;      //  clearing buffer just upto the previous location 
            }
        }
        else{
            noMatch=0;
        }
    }
    else{
        buffer[l]=0;
    }
    return 1;
}

int main() {

char s[100];
printf("Enter the input string of Morse code:\n");
scanf("%s",s);
initMorse();
printf("Possible translations are:\n");
solution(s,0,Morse,strlen(s));
for
return 0;
}


Sample Output :

No comments:

Post a Comment