/* * To change this template, choose Tools | Templates * and open the template in the editor. */
package dynamic_prog;
import java.util.Scanner;
import java.io.*;
import java.io.FileReader;
import java.nio.file.Files;
import java.util.*;
import java.lang.String;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.util.Collections;
import java.lang.Exception;
/** * * @author Hira */publicclass Dynamic_Prog {
    
   // Path p=Paths.get("seq.txt");//Charset charset = Charset.forName("US-ASCII");// BufferedReader reader = Files.newBufferedReader(p, charset)) {//  String line = null;// while ((line = reader.readLine()) != null) {//   System.out.println(line);// }privatestatic String a=" GGATCGA";
    privatestatic String b=" GAATTCAGTTA";
    privatestatic List<String>trace=new ArrayList<String>();
    privatestatic String na,nb;
    privatestaticint[][] arr = newint[a.length()][b.length()];
    privatestaticint match,mismatch,gap;
    /**     * @param args the command line arguments     */publicstaticvoid main(String[] args) {
     
    System.out.print(a.charAt(0));
       Scanner in=new Scanner(System.in);
       System.out.println("set scores:");
       System.out.println("Enter score for match:");
       match=in.nextInt();
       System.out.println("Enter score for mismatch(-ive value):");
       mismatch=in.nextInt();
       System.out.println("Enter gap penalty"); 
       gap=in.nextInt();
       
        System.out.println(a);
       
       for(int i=0, j=0;j<b.length();j++)
           arr[i][j]=j*gap;
       
     
       
       for (int i=1,j=0;i<a.length();i++)
           arr[i][j]=gap*i;
     
      
       for (int i=0;i<a.length();i++){
          for(int j=0;j<b.length();j++)
               System.out.print(arr[i][j]+" ");
          System.out.println();
       }
           
       for (int i=1;i<a.length();i++)
           for(int j=1;j<b.length();j++)
                arr[i][j]=max(i,j);
       System.out.println("trace list");
       System.out.println(trace);
       // for (int i=0;i<a.length();i++){// for(int j=0;j<b.length();j++)// System.out.print(arr[i][j]+" ");// System.out.println();
           
       
               traceback();
               
    
    }
    
   publicstaticint max(int i,int j){
       int x,y,z;
       String p,o,t; 
       List<Integer>l=new ArrayList<Integer>();
    //   List<Integer>index=new ArrayList<Integer>();if(a.charAt(i)==b.charAt(j)){
                            x=arr[i-1][j-1]+match;
                            l.add(x);
                            p=i-1+":"+(j-1)+"";
                            
                      }
                      else{
                             x=arr[i-1][j-1]+mismatch;
                             l.add(x);
                             p=i-1+":"+(j-1)+"";
                          }
                     y=arr[i][j-1]+gap;
                     l.add(y);
                     o=i+":"+(j-1)+"";
                     z=arr[i-1][j]+gap;
                     l.add(z);
                     t=i-1+":"+(j)+"";
                     int max=Collections.max(l);    
                    // System.out.println(l);// System.out.println(max);if(max==y)
                     {
                         //trace.add(o);
                         trace.add("h");
                         String n=max+"";
                        // trace.add(n);
                     }
                     elseif(max==z)
                     {
                        ////trace.add(t);
                        trace.add("v");
                        String n=max+"";
                        // trace.add(n);
                     }
                             
                     else{
                      // trace.add(p);
                       trace.add("d"); 
                       String n=max+"";
                       // trace.add(n);
                     }       
                trace.toString();
                
       return max;
           }
   
    publicstaticvoid traceback(){
        
         List<String>x=new ArrayList<String>();
         List<String>y=new ArrayList<String>();
         a=a.trim();
         b=b.trim();
      //   Collections.reverse(a);//Collections.reverse(b);    
         System.out.println(a);
         int i=a.length()-1;
         int j=b.length()-1;
        // List<String>a1=new ArrayList<String>();// List<String>b1=new ArrayList<String>();
          System.out.println(i);
           System.out.println(j);
           String h;
           String   c;
           char t,r;
        //for(int i=l;i>=l;){// for(int j=k;j>=k;){//do{for(int w=trace.size()-1;w>=0;)
               {
                 // if(trace.get(w)=="h")
                   {
                        x.add("_");                       
                        //trace.remove(w);// a=a.substring(0, i);
                       c= b.charAt(j)+"";
                        y.add(c);
                        j--; 
                        w--;
                       // break;
               }
                  elseif(trace.get(w)=="v"){
                      y.add("_");
                      //trace.remove(w);
                       h=a.charAt(i)+"";
                       x.add(h);
                       i--;
                       w=w-b.length();
                      //a=a.substring(0, i);// b=b.substring(0, j); // break;
                  } 
                  elseif(trace.get(w)=="d")
                  {
                     // try{
                      
                      t=a.charAt(i);
                      h=t+"";
                      x.add(h);
                       c=b.charAt(j)+"";
                     y.add(c); 
                     // trace.remove(w);//a=a.substring(0, i);// b=b.substring(0, j); 
                      j--;
                      i--;
                      w=w-(b.length()-1);
                     // break;//  }catch(Exception e)// {//System.err.println("caught exception");// }
                  }
                     // else//{// }
        }
       // }//while(i>-1||j>-1);
         
       Collections.reverse(x);
       Collections.reverse(y);        
       // String f=x.toString();// String o=y+"";
       
       System.out.println("X"); 
       System.out.println(x);
       System.out.println("y list");
       System.out.println(y);
       System.out.println(a);
    }
}