Lab 11  Solutions,  ESC101, 2004-2005 Semester-II


1.

import java.io.*;
import java.util.*;

class LineCnt
{
    public static void main(String args[])
    {
        BufferedReader br = null;
        int lc = 0;

        try {
            br = new BufferedReader(new FileReader(args[0]));
           
            while(br.readLine() != null)
                lc++;
           
            br.close();
           
        }catch(Exception e){
            System.out.println(e);
        }

        System.out.println("Number of Lines: "+lc);
    }
}   


2.

import java.io.*;
import java.util.*;

class Find {

    public static void main(String args[]){

        BufferedReader br = null;
        String pattern, s;
        int numInputFiles, ctr;

        numInputFiles = args.length - 1;
        pattern = new String ();
        s = new String ();

        pattern = args[0];   
        for (ctr = 0; ctr < numInputFiles; ctr++){
            try {
                br = new BufferedReader (new FileReader (args[ctr+1]));
                s = br.readLine ();
            }catch (Exception e) {
                System.out.println (e);
            }
           
            while (s!=null) {
                if( s.indexOf (pattern) >= 0) {
                    System.out.print(args[ctr+1] + ": ");
                    System.out.println (s);
                }   
           
                try {
                    s = br.readLine ();
                } catch (Exception e) {
                    System.out.println (e);
                }
            }
        }
        try{
            br.close();
        } catch(Exception e){
            System.out.println(e);
        }   

    }
}
           



3.

import java.io.*;
import java.util.*;

class PlayFairCipher
{
    public static void main(String args[])
    {
        char[][] arr = new char[5][5];
        BufferedReader br1 = null;
        BufferedWriter br2 = null;
        String keyword,key;
        int i, j, len;
        boolean found=false;
        int c1, c2;
        char[] alpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

        if(args.length != 3){
            System.out.println("Usage: java PlayFairCipher <file1> <Keyword> <file2> ");
            return;
        }    

        keyword = args[1];
        
        arr[0][0] = keyword.charAt(0);
        len = 1;
        
        for(i=1; i<keyword.length(); i++){
            for(j=0; j<len; j++){
                if(arr[j/5][j%5] == keyword.charAt(i)){
                    found = true;
                    break;
                }
            }
            if(!found){
                arr[len/5][len%5] = keyword.charAt(i);
                len++;
            }
            found = false;
        }

        for(i=0; i<len; i++){
            if(arr[i/5][i%5] == 'J')
                arr[i/5][i%5] = 'I';
        }
    

        found = false;
        for(i=0; i<25; i++){
            for(j=0; j<len; j++){
                if(arr[j/5][j%5] == alpha[i]){
                    found = true;
                    break;
                }    
            }

            if(!found){
                arr[len/5][len%5] = alpha[i];
                len++;
            }
            found = false;
        }

        for(i=0; i<25; i++){
            System.out.print(arr[i/5][i%5] + "   ");
            if( (i+1)%5 == 0)
                System.out.println();
        }        
                    
        System.out.println();
            
        
        try {
            br1 = new BufferedReader(new FileReader(args[0]));
            br2 = new BufferedWriter(new FileWriter(args[2]));
            
            
l1:        do{    
            while(true){
                c1 = br1.read();
                
                if(c1 == -1)
                    break l1;
                    
                if(Character.isLetter((char)c1))
                    break;
                br2.write(c1);    
            }
            
            while(true){
                c2 = br1.read();

                if(c2 == -1){
                    br2.write(c1);
                    break l1;
                }
                
                if(Character.isLetter((char)c2))
                    break;

                br2.write(c1);
                br2.write(c2);

                continue l1;
            }

            if(c1 == 'J')
                c1 = 'I';

            if(c2 == 'J')
                c2 = 'I';

            //  finding 'c1' and 'c2' positions in arr[][]

            int pos1=0, pos2=0;
            boolean p1=false, p2=false;
            boolean isUpper_c1=false, isUpper_c2=false;

            if(Character.isUpperCase((char)c1))
                isUpper_c1 = true;

            if(Character.isUpperCase((char)c2))
                isUpper_c2 = true;


            for(i=0; i<25; i++){
                if(arr[i/5][i%5] == Character.toUpperCase((char)c1)){
                    pos1 = i;
                    break;
                }
            }    
                    
            for(i=0; i<25; i++){
                if(arr[i/5][i%5] == Character.toUpperCase((char)c2)){
                    pos2 = i;
                    break;
                }
            }    
                    

            //  Checking whether 'c1' and 'c2' are in the same row or column

            if( (pos1/5 == pos2/5) || ((pos1%5) == (pos2%5)) ){
//                System.out.println("c1:"+(char)c1+"  c2:"+(char)c2);
//                System.out.println("pos1:"+pos1+"  pos2:"+pos2);
                
                br2.write(c2);
                br2.write(c1);
                continue l1;
            }

            //  Finding the opposite rectangle side characters


            if(!isUpper_c1)
                br2.write(Character.toLowerCase(arr[pos1/5][pos2%5]));
            else    
                br2.write(arr[pos1/5][pos2%5]);
                
            if(!isUpper_c2)
                br2.write(Character.toLowerCase(arr[pos2/5][pos1%5]));
            else    
                br2.write(arr[pos2/5][pos1%5]);

        }while(true);

        br1.close();
        br2.close();
        }catch(IOException e){
            System.out.println(e);
        }    
    }
}