Wednesday 25 June 2014

Forgot Password-Solution


Problem Statement:

Chef changed the password of his laptop a few days ago, but he can't remember it today. Luckily, he wrote the encrypted password on a piece of paper, along with the rules for decryption.
The encrypted password is a string S consists of ASCII printable characters except space (ASCII 33 - 126, in decimal notation, the same below). Read here for more details: ASCII printable characters.
Each rule contains a pair of characters ci, pi, denoting that every character ci appears in the encrypted password should be replaced with pi. Notice that it is not allowed to do multiple replacements on a single position, see example case 1 for clarification.
After all the character replacements, the string is guaranteed to be a positive decimal number. The shortest notation of this number is the real password. To get the shortest notation, we should delete all the unnecessary leading and trailing zeros. If the number contains only non-zero fractional part, the integral part should be omitted (the shortest notation of "0.5" is ".5"). If the number contains zero fractional part, the decimal point should be omitted as well (the shortest notation of "5.00" is "5").
Please help Chef to find the real password.

Input

The first line of the input contains an interger T denoting the number of test cases.
The description of T test cases follows.
The first line of each test case contains a single interger N, denoting the number of rules.
Each of the next N lines contains two space-separated characters ci and pi,
denoting a rule.
The next line contains a string S, denoting the encrypted password.

Output

For each test case, output a single line containing the real password.

Constraints

  • 1 ≤ T ≤ 1000
  • 0 ≤ N ≤ 94
  • All characters in S and ci may be any ASCII printable character except space. (ASCII 33 - 126)
  • All ci in a single test case are distinct.
  • pi is a digit ("0" - "9") or a decimal point "." (ASCII 46).
  • The total length of S in a single input file will not exceed 106.

Example

Input:
4
2
5 3
3 1
5
0
01800.00
0
0.00100
3
x 0
d 3
# .
0xd21#dd098x

Output:
3
1800
.001
321.33098 
 
 
Solution:
 
/*******************************************************************************************/
 
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
 int t,n,i,ch,flag,flag1;
 int j,k,l;
 char ci,pi,*str,*cih;
 scanf("%d",&t);
 cih=(char*)malloc(sizeof(char)*130);
  
 for(i=0;i<t;i++)
 { 
  str=(char*)malloc(sizeof(char)*10000000);
 
  flag=0;
  flag1=0;
  for(j=0;j<130;j++)
   cih[j]=' ';
  scanf("%d",&n);
  for(j=0;j<n;j++)
  {
   scanf(" %c %c",&ci,&pi);
   ch=(int)ci;
   cih[ch]=pi;
  }
  
  scanf("%s",str);
  
  for(j=0;str[j]!='\0';j++)
  {
   if(cih[(int)str[j]]!=' ')
    str[j]=cih[(int)str[j]];
  }
  
  for(j=0;str[j]!='\0';j++)
  {
   if(str[j]=='0' || str[j]=='.')
   { 
   }
   else
   {
    flag1=1;
    break;
   }
  }
  
  if(flag1==1)
  {
   for(j=0;str[j]!='\0';j++)
   {
    if(str[j]!='0')
     break;
   }
  
   for(k=j;str[k]!='\0';k++)
   {
    if(str[k]=='.')
    {
     flag=1;
     break;
    } 
   }
   k=strlen(str)-1;
   if(flag==1)
   {
    for(k=(strlen(str)-1);k>=j;k--)
    {
     if(str[k]!='0')
      break;
    }
    if(str[k]=='.')
     k=k-1;
   }
  
   for(l=j;l<=k;l++)
    printf("%c",str[l]);
   printf("\n");
  }
  else
   printf("0\n"); 
  free(str);
 }
 return 0;
} 


/*************************************************************************************/

Tuesday 10 June 2014

Simple Program to record Sound and play them back - Source Code - Java

Download the Source code from here.
View the eclipse project here.
/*****************************************************************************/
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import javax.swing.JButton;
import javax.swing.JFrame;


public class AudioCapture extends JFrame implements ActionListener
{
    boolean stopCapture = false;
    ByteArrayOutputStream byteArrayOutputStream;
    AudioFormat audioFormat;
    TargetDataLine targetDataLine;
    AudioInputStream audioInputStream;
    SourceDataLine sourceDataLine;
   
    final JButton startButton = new JButton("Start");
    final JButton stopButton = new JButton("Stop");
    final JButton playButton = new JButton("Playback");
    public static void main(String[] args)
    {
        AudioCapture audioCapture=new AudioCapture();
        audioCapture.setVisible(true);
        audioCapture.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public AudioCapture()
    {
        setSize(400,80);
        setLocation(100,100);
        this.setLayout(new GridLayout(1,3,20,20));
        this.setResizable(false);
       
        stopButton.setEnabled(false);
        playButton.setEnabled(false);
       
        add(startButton);
        add(stopButton);
        add(playButton);
       
       
        startButton.addActionListener(this);
        stopButton.addActionListener(this);
        playButton.addActionListener(this);
       
    }
   
    public Insets getInsets()
    {
        return new Insets(40,20,10,20);
    }
    @Override
    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource()==startButton)
        {
            startButton.setEnabled(false);
            stopButton.setEnabled(true);
            playButton.setEnabled(false);
           
            audioFormat=new AudioFormat(8000.0F,16,1,true,false);
            DataLine.Info dataLineInfo=new DataLine.Info(TargetDataLine.class,audioFormat);
            try
            {
                targetDataLine=(TargetDataLine)AudioSystem.getLine(dataLineInfo);
                targetDataLine.open(audioFormat);
                targetDataLine.start();
               
                new CaptureThread(this);
               
            }
            catch (LineUnavailableException e)
            {
                e.printStackTrace();
            }
        }
        else if(ae.getSource()==stopButton)
        {
            startButton.setEnabled(true);
            stopButton.setEnabled(false);
            playButton.setEnabled(true);
           
            stopCapture=true;
        }
        else if(ae.getSource()==playButton)
        {
            byte audioData[]=byteArrayOutputStream.toByteArray();
            InputStream byteArrayInputStream=new ByteArrayInputStream(audioData);
            AudioFormat audioFormat=new AudioFormat(8000.0F,16,1,true,false);
            audioInputStream=new AudioInputStream(byteArrayInputStream,audioFormat,audioData.length/audioFormat.getFrameSize());
           
            DataLine.Info dataLineInfo =new DataLine.Info(SourceDataLine.class,audioFormat);
            try
            {
                sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLineInfo);
                sourceDataLine.open(audioFormat);
                sourceDataLine.start();
               
                new PlayThread(this);
               
            }
            catch (LineUnavailableException e)
            {
                e.printStackTrace();
            }
           
        }
    }
}
class CaptureThread implements Runnable
{
    byte tempBuffer[]=new byte[10000];
    AudioCapture audioCaptureObj;
    CaptureThread(AudioCapture audioCaptureObj)
    {
        this.audioCaptureObj=audioCaptureObj;
        Thread th=new Thread(this);
        th.start();
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub

        audioCaptureObj.byteArrayOutputStream=new ByteArrayOutputStream();
        audioCaptureObj.stopCapture=false;
        while(!audioCaptureObj.stopCapture)
        {
            int count=audioCaptureObj.targetDataLine.read(tempBuffer,0,tempBuffer.length);
            if(count>0)
            {
                audioCaptureObj.byteArrayOutputStream.write(tempBuffer, 0, count);
            }
        }
        try {
            audioCaptureObj.byteArrayOutputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
class PlayThread implements Runnable
{
    byte tempBuffer[] = new byte[10000];
    AudioCapture audioCaptureObj;
    public PlayThread(AudioCapture audioCaptureObj)
    {
        this.audioCaptureObj=audioCaptureObj;
        Thread th=new Thread(this);
        th.start();
    }
    @Override
    public void run()
    {
        int count;
        try {
            while((count=audioCaptureObj.audioInputStream.read(tempBuffer,0,tempBuffer.length))!=-1)
            {
                if(count>0)
                {
                    audioCaptureObj.sourceDataLine.write(tempBuffer, 0, count);
                }
            }
            audioCaptureObj.sourceDataLine.drain();
            audioCaptureObj.sourceDataLine.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
/*********************************************************************************/