import java.io.*;
class ed2
{
BufferedReader obj = new BufferedReader(new InputStreamReader(System.in));
void encode()throws InterruptedException,IOException
{
String rs,ren;
encoder_symbol();
rs = encode_input();
ren = encode_find(rs);
encode_display(ren);
}
void decode()throws InterruptedException,IOException
{
String rs,rde;
decoder_symbol();
rs = decode_input();
rde = decode_find(rs);
decode_display(rde);
}
void encoder_symbol()throws InterruptedException //just for fun
{
System.out.println("******** *** *** ********* ************ ****** ******** *****");
Thread.sleep(100);
System.out.println("******** **** *** ********* ************ ******** ******** *** **");
Thread.sleep(100);
System.out.println("*** ***** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("*** *** ** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("****** *** ** *** *** *** *** *** *** ****** *****");
Thread.sleep(100);
System.out.println("****** *** ** *** *** *** *** *** *** ****** *****");
Thread.sleep(100);
System.out.println("*** *** ** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("*** *** ** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("******* *** ***** ********* ************ ******** ******** *** **");
Thread.sleep(100);
System.out.println("******* *** **** ********* ************ ****** ******** *** **");
Thread.sleep(2700);
System.out.println();
System.out.println();
}
void decoder_symbol()throws InterruptedException // just for fun
{
System.out.println("****** ******** ********* ************ ****** ******** *****");
Thread.sleep(100);
System.out.println("******** ******** ********* ************ ******** ******** *** **");
Thread.sleep(100);
System.out.println("*** *** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("*** *** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("*** *** ****** *** *** *** *** *** ****** *****");
Thread.sleep(100);
System.out.println("*** *** ****** *** *** *** *** *** ****** *****");
Thread.sleep(100);
System.out.println("*** *** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("*** *** *** *** *** *** *** *** *** *** **");
Thread.sleep(100);
System.out.println("******** ******** ********* ************ ******** ******** *** **");
Thread.sleep(100);
System.out.println("****** ******** ********* ************ ****** ******** *** **");
Thread.sleep(1000);
System.out.println();
System.out.println();
}
String encode_input()throws IOException
{
String s;
System.out.println("ENTER THE STRING TO BE ENCODED");
s = obj.readLine();
return(s);
}
String decode_input()throws IOException
{
String s;
System.out.println("ENTER THE CODE TO BE DECODED");
s = obj.readLine();
return(s);
}
String encode_find(String s)//converting the string into its binary equivalent
{
int ac,i,j,l,chklen;
String bc,en="";
char ic;
l = s.length();
for(i=0;i<l;i++)
{
ic = s.charAt(i); //takes out every character
bc = "";
ac = (int)ic; //ASCII value of this character
while(ac!=0)
{
bc = Integer.toString((ac%2)) + bc; //converting the ASCII value into binary equivalent
ac = ac/2;
}
chklen = bc.length();//length of the binary equivalent
if(chklen<7)
{
for(j=1;j<=(7-chklen);j++) //increasing the length of binary equivalent so that it becomes equal to 7
{
bc = "0" + bc;
}
}
en = en+bc; //concatenating all the binary equivalent into one string
}
return (en);
}
String decode_find(String s)// converts binary(i.e. in the form of dots and space) to decimal
{
int f;//for the index of every character of code
long l,i,j,ac;
char c;
String de="";
l = s.length();
f = 0;//index of first caharcter
for(i=0;i<(l/7);i++)//since the length of every binary equivalent of a character is 7 therefore there will be (length/7) characters in a code of length l
{
ac = 0;//intializes the decimal(ASCII) equivalent to zero
for(j=6;j>=0;j--)//loop will work 7 times for every binary equivalent of a character
{
c = s.charAt(f);//takes out every dot or space
if(c=='.')//it means that c corresponds to 'one'
{
ac = ac + ((int)Math.pow(2,j));//converting binary into decimal(ASCII) equivalent by adding all the powers of 2 which correspond to one('.')
}
f++;//increasing the index for next character of binary equivalent
}
de = de + ((char)ac);//converts the ASCII equivalent into character and then concatenates it with the intitial string
}
return(de);
}
void encode_display(String en)//displays the code
{
int i,l;
char ic;
System.out.println("YOUR ENCODED MESSAGE IS :");
l=en.length();
for(i=0;i<l;i++)
{
ic=en.charAt(i);
if(ic=='1')//for every 'one' it will print '.'(dot)
{
System.out.print(".");
}
else if(ic=='0')//for every 'zero' it will print ' '(space)
{
System.out.print(" ");
}
}
}
void decode_display(String de)
{
System.out.println(de);
}
public static void main(String args[])throws IOException,InterruptedException
{
BufferedReader obj = new BufferedReader(new InputStreamReader(System.in));
char ch;
ed2 ed = new ed2();
System.out.println("PRESS 'E' TO ENCODE A MESSAGE OR PRESS 'D' TO DECODE A MESSAGE");
ch = (char)obj.read();
if((ch=='e')||(ch=='E'))
{
ed.encode();
}
else if((ch=='d')||(ch=='D'))
{
ed.decode();
}
}
}