Advertisement
Guest User

GgGg Decode

a guest
Dec 17th, 2015
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  1. import java.nio.file.*;
  2. import java.util.List;
  3. import java.util.regex.*;
  4.  
  5. class GGgg{
  6.     public static void main(String[] args){
  7.         List<String> in=null;
  8.  
  9.         try{in=Files.readAllLines(Paths.get("decode3.txt"));}
  10.         catch(java.io.IOException e){e.printStackTrace();System.exit(-1);}
  11.        
  12.         if(in.size()==2){
  13.             System.out.println(in.get(0)+"\n");
  14.             System.out.println(in.get(1)+"\n");
  15.             System.out.println(decode(in.get(0),in.get(1)));
  16.         }
  17.         else
  18.             System.out.print("oops!");
  19.     }
  20.    
  21.     private static String decode(String key,String message){
  22.         Matcher m=Pattern.compile("\\w\\u0020[gG]+").matcher(key);
  23.         GGTree dict=new GGTree();
  24.         StringBuilder out=new StringBuilder();
  25.  
  26.         while(m.find()){
  27.             int s=m.start();
  28.             int e=m.end();
  29.             dict.build(key.substring(s,s+1).charAt(0),key.substring(s+2,e));
  30.         }
  31.         for(int i=0;i<message.length();i++){
  32.             char currChar=message.charAt(i);
  33.             if(currChar=='g'||currChar=='G'){
  34.                 dict.appendToQuery(currChar);
  35.                 if(dict.containData()){
  36.                     out.append(dict.getData());
  37.                     dict.resetQuery();
  38.                 }
  39.             }
  40.             else{
  41.                 out.append(currChar);
  42.             }
  43.         }
  44.         return out.toString();
  45.     }
  46. }
  47. class GGTree{
  48.     private GGNode root;
  49.     private GGNode currQueryNode;
  50.     private StringBuilder query;
  51.     GGTree(){
  52.         root=new GGNode(NodeType.ROOT,GGNode.NO_VALUE);
  53.         currQueryNode=root;
  54.         query=new StringBuilder();
  55.         }
  56.     public void appendToQuery(char g){
  57.         assert g=='g'||g=='G';
  58.        
  59.         query.append(g);
  60.         if(g=='g'&&currQueryNode.childg_lower!=null){
  61.             currQueryNode=currQueryNode.childg_lower;
  62.         }
  63.         else if(g=='G'&&currQueryNode.childg_upper!=null){
  64.             currQueryNode=currQueryNode.childg_upper;
  65.         }
  66.         else{
  67.             System.out.println("Error in append to query");
  68.         }
  69.     }
  70.     public void resetQuery(){
  71.         this.currQueryNode=root;
  72.         this.query.delete(0,query.length());
  73.     }
  74.     public char getData(){
  75.         return currQueryNode.data;
  76.     }
  77.     public boolean containData(){
  78.         return currQueryNode.data!=GGNode.NO_DATA;
  79.     }
  80.     public void build(char data,String path){
  81.         GGNode currNode=root;
  82.         for(int i=0;i<path.length();i++){
  83.             switch(path.charAt(i)){
  84.                 case 'g':
  85.                         if(currNode.childg_lower!=null)
  86.                             currNode=currNode.childg_lower;
  87.                         else{
  88.                             currNode.childg_lower=new GGNode(NodeType.NODE,'g');
  89.                             currNode=currNode.childg_lower;
  90.                         }
  91.                         break;
  92.                 case 'G':
  93.                         if(currNode.childg_upper!=null)
  94.                             currNode=currNode.childg_upper;
  95.                         else{
  96.                             currNode.childg_upper=new GGNode(NodeType.NODE,'G');
  97.                             currNode=currNode.childg_upper;
  98.                         }
  99.                         break;
  100.                 default:
  101.                         System.out.println("error in build tree");
  102.             }
  103.         }
  104.         currNode.setData(data);
  105.     }
  106.     private enum NodeType{ROOT,NODE}
  107.    
  108.     private class GGNode{
  109.         private  static final char NO_DATA='\u0000';
  110.         private  static final char NO_VALUE='\uFFFF';
  111.         private NodeType type;
  112.         GGNode childg_lower;
  113.         GGNode childg_upper;
  114.         private char value;
  115.         private char data;
  116.        
  117.         GGNode(NodeType type,char value){
  118.             this.type=type;
  119.             this.value=value;
  120.             this.data=NO_DATA;
  121.         }
  122.         GGNode(NodeType type,char value,char data){
  123.             this.type=type;
  124.             this.value=value;
  125.             this.data=data;
  126.         }
  127.         private void setData(char data){
  128.             this.data=data;
  129.         }
  130.     }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement