Advertisement
OverSkillers

Word Corrector

May 26th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 29.69 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package ficha4_corretor.aed;
  7.  
  8. import java.io.*;
  9. import java.util.*;
  10.  
  11. class FicheiroTexto{
  12.    
  13.     private BufferedReader fR;
  14.     private BufferedWriter fW;
  15.  
  16.     public void abreLeitura(String nomeDoFicheiro) throws IOException{
  17.         fR = new BufferedReader(new FileReader(nomeDoFicheiro));
  18.     }
  19.     public void abreEscrita(String nomeDoFicheiro) throws IOException{
  20.         fW = new BufferedWriter(new FileWriter(nomeDoFicheiro));
  21.     }
  22.    
  23.     public String leLinha() throws IOException{
  24.         return fR.readLine();
  25.     }
  26.    
  27.     public void escreveLinha(String linha) throws IOException{
  28.         fW.write(linha,0,linha.length());
  29.         fW.newLine();
  30.     }
  31.    
  32.     public void escreveNumero(int num) throws IOException{
  33.         String st = "";
  34.         st = st.valueOf(num);
  35.         escreveLinha(st);
  36.     }
  37.    
  38.     public void fechaLeitura() throws IOException {
  39.         fR.close();
  40.     }
  41.     public void fechaEscrita() throws IOException {
  42.         fW.close();
  43.     }
  44. }
  45.  
  46. class Word{
  47.     public String palavra;
  48.     public int frequencia;
  49.    
  50.     public Word(String s,int frequencia){
  51.         this.palavra  = s;
  52.         this.frequencia = frequencia;
  53.     }
  54.    
  55.     @Override
  56.     public String toString(){
  57.         return palavra;
  58.     }
  59. }
  60.  
  61. class HashNodeWord{
  62.     public Word chave;
  63.     public int valor;
  64.  
  65.     public HashNodeWord next;
  66.  
  67.     public HashNodeWord(Word word, int valor){
  68.         this.chave = word;
  69.         this.valor = valor;
  70.     }
  71. }
  72.  
  73. class Dicio{
  74.  
  75.     public int numInicial;
  76.     public ArrayList<HashNodeWord> listaPalavras;
  77.     public int tamanho;
  78.  
  79.     public Dicio(){
  80.         listaPalavras = new ArrayList<>();
  81.         numInicial = (int) (4927*1.30);
  82.         tamanho = 0;
  83.  
  84.         for (int i = 0; i < numInicial; i++){
  85.             listaPalavras.add(null);
  86.         }
  87.     }
  88.  
  89.     public int colisao(){
  90.         int contador = 0;
  91.         for(HashNodeWord a : listaPalavras){
  92.             if(a != null){
  93.                 System.out.println(a.chave);
  94.                 //contador++;
  95.             }
  96.         }
  97.         return contador;
  98.     }
  99.    
  100.     public Word[] indexes(Word word){
  101.         Word[] Final = new Word[20];
  102.         int bucketIndex = (int) getIndice(word.palavra);
  103.         HashNodeWord head = listaPalavras.get(bucketIndex);
  104.         int n=0;
  105.         while(listaPalavras.get(bucketIndex + n) == null){
  106.              n += 1;
  107.              if(listaPalavras.get(bucketIndex + n) != null){
  108.                  head = listaPalavras.get(bucketIndex + n);
  109.              }
  110.         }
  111.        
  112.         HashNodeWord Bk = head;
  113.        
  114.         for(int i=0;i<10;i++){
  115.                 HashNodeWord original = head;
  116.                 Final[i] = head.chave;
  117.                 head = head.next;
  118.                 if(head == null){
  119.                     bucketIndex = (int) getIndice(original.chave.palavra);
  120.                     n=1;
  121.                     if(bucketIndex + n == numInicial - n){
  122.                         break;
  123.                     }
  124.                     head = listaPalavras.get(bucketIndex + n);
  125.                     while(listaPalavras.get(bucketIndex + n) == null){
  126.                         n += 1;
  127.                         if(listaPalavras.get(bucketIndex + n) != null){
  128.                             head = listaPalavras.get(bucketIndex + n);
  129.                         }
  130.                     }
  131.                    
  132.                 }            
  133.         }
  134.                
  135.         for(int i=0;i<10;i++){
  136.             Final[i+10] = Bk.chave;
  137.             n = 1;
  138.             bucketIndex = (int) getIndice(Bk.chave.palavra);
  139.             if(bucketIndex - n == 1){
  140.                 break;
  141.             }
  142.             if(listaPalavras.get(bucketIndex - n) == null){
  143.                 while(listaPalavras.get(bucketIndex - n) == null){
  144.                     n+=1;
  145.                     if(listaPalavras.get(bucketIndex - n) != null){
  146.                             Bk = listaPalavras.get(bucketIndex - n);
  147.                     }
  148.                 }
  149.             }
  150.             else{
  151.                 Bk = listaPalavras.get(bucketIndex - n);
  152.             }
  153.         }            
  154.         return Final;
  155.     }
  156.  
  157.     public int getIndice(String palavra){
  158.         int hashCode = SDBMHash(palavra);
  159.         int index = hashCode % numInicial;
  160.         return index;
  161.     }
  162.    
  163.     public int getFrequencia(String palavra){
  164.          int bucketIndex = (int) getIndice(palavra);
  165.             HashNodeWord head = listaPalavras.get(bucketIndex);
  166.             return head.chave.frequencia;
  167.     }
  168.  
  169.     public int getNode(String palavra){
  170.         int bucketIndex = (int) getIndice(palavra);
  171.         HashNodeWord head = listaPalavras.get(bucketIndex);
  172.  
  173.         while (head != null){
  174.             if (head.chave.equals(palavra)){
  175.                 return head.valor;
  176.             }
  177.             head = head.next;
  178.         }
  179.        
  180.         return 0;
  181.     }
  182.    
  183.     public int verifica(Word word){
  184.         int bucketIndex = (int) getIndice(word.palavra);
  185.         HashNodeWord head = listaPalavras.get(bucketIndex);
  186.         if(head != null && word.palavra.equals(head.chave.palavra)){
  187.             return 0;
  188.         }
  189.         else{
  190.             return 1;
  191.         }
  192.     }
  193.  
  194.     public void add(Word word, int valor){
  195.         int bucketIndex = (int) getIndice(word.palavra);
  196.         HashNodeWord head = listaPalavras.get(bucketIndex);
  197.  
  198.         while (head != null){
  199.             if (head.chave.equals(word)){
  200.                 head.valor = valor;
  201.                 return;
  202.             }
  203.             head = head.next;
  204.         }
  205.  
  206.         tamanho++;
  207.         head = listaPalavras.get(bucketIndex);
  208.         HashNodeWord novo = new HashNodeWord(word, valor);
  209.         novo.next = head;
  210.         listaPalavras.set(bucketIndex, novo);
  211.  
  212.         if ((1.0*tamanho)/numInicial >= 0.7){
  213.             tamanho = 0;
  214.             ArrayList<HashNodeWord> temp = listaPalavras;
  215.             listaPalavras = new ArrayList<>();
  216.             numInicial = 2 * numInicial;
  217.             for (int i = 0; i < numInicial; i++)
  218.                 listaPalavras.add(null);
  219.  
  220.             for (HashNodeWord headNode : temp){
  221.                 while (headNode != null){
  222.                     add(headNode.chave, headNode.valor);
  223.                     headNode = headNode.next;
  224.                 }
  225.             }
  226.         }
  227.     }
  228.    
  229.     public int SDBMHash(String str){
  230.       int hash = 0;
  231.  
  232.       for(int i = 0; i < str.length(); i++){
  233.          hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;
  234.       }
  235.      
  236.       if(hash<=0){
  237.         hash *= -1;
  238.       }
  239.  
  240.       return hash;
  241.    }
  242. }
  243.  
  244.  
  245. class Hist{
  246.     public String palavra;
  247.     public ArrayList<Word> corrigida;
  248.     public int vezes;
  249.    
  250.     public Hist(String palavra){
  251.         this.palavra = palavra;
  252.         this.corrigida = new ArrayList<>();
  253.         this.vezes = 1;
  254.     }
  255.    
  256.     public void addCorrigida(Word corr){
  257.         this.corrigida.add(corr);
  258.     }
  259.    
  260.     public int getVezes(){
  261.         return this.vezes;
  262.     }
  263. }
  264.  
  265. class HashNodeHist{
  266.     public Hist chave;
  267.     public int valor;
  268.  
  269.     public HashNodeHist next;
  270.  
  271.     public HashNodeHist(Hist chave, int valor){
  272.         this.chave = chave;
  273.         this.valor = valor;
  274.     }
  275. }
  276.  
  277. class Historico{
  278.  
  279.     public int numInicial;
  280.     public ArrayList<HashNodeHist> listaPalavras;
  281.     public int tamanho;
  282.  
  283.     public Historico(){
  284.         listaPalavras = new ArrayList<>();
  285.         numInicial = (int) (4927*1.30);
  286.         tamanho = 0;
  287.        
  288.         for (int i = 0; i < numInicial; i++){
  289.             listaPalavras.add(null);
  290.         }
  291.  
  292.     }
  293.  
  294.     public int colisao(){
  295.         int contador = 0;
  296.         for(HashNodeHist a : listaPalavras){
  297.             if(a != null){
  298.                 System.out.println(a.chave.palavra + " " + a.chave.corrigida + " " + a.chave.vezes);
  299.                 for(Word w:a.chave.corrigida){
  300.                     System.out.println(w.frequencia);
  301.                 }
  302.                 contador++;
  303.             }
  304.         }
  305.         return contador;
  306.     }
  307.  
  308.     public int getIndice(String palavra){
  309.         int hashCode = SDBMHash(palavra);
  310.         int index = hashCode % numInicial;
  311.         return index;
  312.     }
  313.  
  314.     public int getNode(String palavra){
  315.         int bucketIndex = (int) getIndice(palavra);
  316.         HashNodeHist head = listaPalavras.get(bucketIndex);
  317.  
  318.         while (head != null){
  319.             if (head.chave.equals(palavra)){
  320.                 return head.valor;
  321.             }
  322.             head = head.next;
  323.         }        
  324.         return 0;
  325.     }
  326.    
  327.     public HashNodeHist getNode2(Hist word){
  328.         int bucketIndex = (int) getIndice(word.palavra);
  329.         HashNodeHist head = listaPalavras.get(bucketIndex);
  330.        
  331.         return head;
  332.     }
  333.    
  334.     public int verifica(Hist word){
  335.         int bucketIndex = (int) getIndice(word.palavra);
  336.         HashNodeHist head = listaPalavras.get(bucketIndex);
  337.         if(head != null && word.palavra.equals(head.chave.palavra)){
  338.             return 0;
  339.         }
  340.         else{
  341.             return 1;
  342.         }
  343.     }
  344.    
  345.     public void addVezes(Hist word,Word palavra){
  346.         int bucketIndex = (int) getIndice(word.palavra);
  347.         HashNodeHist head = listaPalavras.get(bucketIndex);
  348.         int vezes = head.chave.getVezes();
  349.         vezes+=1;
  350.         int condicao = 1;
  351.         for (Word w: head.chave.corrigida){
  352.             if(w.palavra.equals(palavra.palavra)){
  353.                 condicao = 0;
  354.             }
  355.         }
  356.         if(condicao == 1){
  357.             head.chave.corrigida.add(palavra);
  358.         }
  359.         head.chave.vezes = vezes;
  360.     }
  361.  
  362.     public void add(Hist word, int valor){
  363.         int bucketIndex = (int) getIndice(word.palavra);
  364.         HashNodeHist head = listaPalavras.get(bucketIndex);
  365.  
  366.         while (head != null){
  367.             if (head.chave.equals(word)){
  368.                 head.valor = valor;
  369.                 return;
  370.             }
  371.             head = head.next;
  372.         }
  373.  
  374.         tamanho++;
  375.         head = listaPalavras.get(bucketIndex);
  376.         HashNodeHist novo = new HashNodeHist(word, valor);
  377.         novo.next = head;
  378.         listaPalavras.set(bucketIndex, novo);
  379.  
  380.         if ((tamanho)/numInicial >= 0.7){
  381.             tamanho = 0;
  382.             ArrayList<HashNodeHist> temp = listaPalavras;
  383.             listaPalavras = new ArrayList<>();
  384.             numInicial = 2 * numInicial;
  385.             for (int i = 0; i < numInicial; i++)
  386.                 listaPalavras.add(null);
  387.  
  388.             for (HashNodeHist headNode : temp){
  389.                 while (headNode != null){
  390.                     add(headNode.chave, headNode.valor);
  391.                     headNode = headNode.next;
  392.                 }
  393.             }
  394.         }
  395.     }
  396.    
  397.     public int SDBMHash(String str){
  398.       int hash = 0;
  399.  
  400.       for(int i = 0; i < str.length(); i++){
  401.          hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;
  402.       }
  403.      
  404.       if(hash<=0){
  405.             hash *= -1;
  406.        }
  407.  
  408.       return hash;
  409.    }
  410. }
  411.  
  412. /**
  413.  *
  414.  * @author j_mig_000
  415.  */
  416. public class Ficha4_CorretorAED {
  417.  
  418.     /**
  419.      * @param args the command line arguments
  420.      */
  421.     public static void main(String[] args) throws IOException {
  422.         // TODO code application logic here
  423.        
  424.         Scanner scanner = new Scanner(System.in);
  425.         String input,comando,line;
  426.         StringTokenizer st;
  427.         FicheiroTexto f = new FicheiroTexto();
  428.        
  429.         Dicio dicio = new Dicio();
  430.         Historico historico  = new Historico();
  431.         int contador=0;
  432.         Word[] palavras = new Word[20];
  433.        
  434.         f.abreLeitura("words.txt");
  435.        
  436.        
  437.         try{
  438.             while((line = f.leLinha()) != null){
  439.                 String[] split = line.split(" ");
  440.                 Word word = new Word(split[1],Integer.valueOf(split[0]));
  441.                 dicio.add(word, (int) SDBMHash(word.palavra));
  442.             }
  443.             f.fechaLeitura();
  444.         }catch (IOException e){
  445.             System.out.printf("Ocorreu a excepção %s ao ler o ficheiro\n",e);
  446.         }catch (NumberFormatException e){
  447.             System.out.printf("Ocorreu a %s ao ler o ficheiro\n",e);
  448.         }
  449.        
  450.         //contador = mesa.colisao();
  451.        
  452.         do{
  453.             input = readLn(200);
  454.             st= new StringTokenizer(input.trim());
  455.             comando = st.nextToken();
  456.             if(comando.equals("FIMFIM")){
  457.                 return;
  458.             }
  459.             else{
  460.                 Word word = new Word(comando,0);
  461.                 palavras = dicio.indexes(word);
  462.                
  463.                 if(dicio.verifica(word) == 0){
  464.                     System.out.println("Palavra no dicio");
  465.                 }
  466.                 else{
  467.                     LinkedList<Word> primario = new LinkedList<>();//1º metodo
  468.                     LinkedList<Word> secundario = new LinkedList<>();//2º metodo
  469.                     LinkedList <Word> story = new LinkedList<>(); //historico
  470.                     LinkedList<Word> last = new LinkedList<>(); //palavras para mostrar
  471.                    
  472.                     Add(dicio,word,primario);
  473.                     Sub(dicio,word,primario);
  474.                     Change(dicio,word,primario);
  475.                     Switch(dicio,word,primario);
  476.                                      
  477.                     if(primario.size()>1) QuickSort(primario,0,primario.size()-1);
  478.                    
  479.                     /*System.out.println("\n");
  480.                     for(Word s:primario){
  481.                         System.out.println(s.palavra + " " + s.frequencia);
  482.                     }*/
  483.                    
  484.                     for(int i = 0;i<palavras.length;i++){
  485.                         if(palavras[i] != null && secundario != null){
  486.                             int condicao = 0;
  487.                             for(Word s: secundario){
  488.                                 if(((Word) s).equals(palavras[i])){
  489.                                     condicao = 1;
  490.                                 }
  491.                             }
  492.                             if(condicao == 0){
  493.                                 secundario.add(palavras[i]);
  494.                             }
  495.                         }
  496.                     }
  497.                    
  498.                     if(secundario.size()>1) QuickSort(secundario,0,secundario.size()-1);
  499.                    
  500.                     /*System.out.println("\n");
  501.                     for(Word s:secundario){
  502.                         System.out.println(s.palavra + " " + s.frequencia);
  503.                     }*/
  504.                    
  505.                     Hist hist = new Hist(comando);
  506.                     if(historico.verifica(hist) == 0){
  507.                         for(Word w: historico.getNode2(hist).chave.corrigida){
  508.                             story.add(w);
  509.                         }
  510.                     }
  511.                    
  512.                     /*if(story != null){
  513.                         for(Word s:story){
  514.                             System.out.println(s.palavra + " " + s.frequencia);
  515.                         }
  516.                     }*/
  517.                    
  518.                     if(story.size() > 1){
  519.                         QuickSort(story,0,story.size()-1);
  520.                     }
  521.                    
  522.                     for(Word s:story){
  523.                         int condicao  = 1;
  524.                         for(Word k:last){
  525.                             if (s.palavra.equals(k.palavra)) condicao = 0;
  526.                         }
  527.                         if(condicao == 1){
  528.                             last.add(s);
  529.                         }
  530.                     }
  531.                    
  532.                     if(last.size()<5){
  533.                         for(Word s:primario){
  534.                             int condicao  = 1;
  535.                             for(Word k:last){
  536.                                 if (s.palavra.equals(k.palavra)) condicao = 0;
  537.                             }
  538.                             if(condicao == 1){
  539.                                 last.add(s);
  540.                             }
  541.                             if(last.size() == 5){
  542.                                 break;
  543.                             }
  544.                         }
  545.                     }
  546.                    
  547.                     if(last.size()<5){
  548.                         for(Word s:secundario){
  549.                             int condicao  = 1;
  550.                             for(Word k:last){
  551.                                 if (s.palavra.equals(k.palavra)) condicao = 0;
  552.                             }
  553.                             if(condicao == 1){
  554.                                 last.add(s);
  555.                             }
  556.                             if(last.size() == 5){
  557.                                 break;
  558.                             }
  559.                         }
  560.                     }
  561.                    
  562.                     System.out.println("Palavra nao encontrada no dicionario");
  563.                     for(int i = 0;i<5;i++){
  564.                         System.out.println("Trocar com " + "'" + last.get(i)+ "'" + "? Prima 1 para aceitar e 2 para recusar");
  565.                         int resposta = scanner.nextInt();
  566.                         if(resposta == 1){
  567.                             System.out.println("Palavra corrigida");
  568.                             hist.addCorrigida(last.get(i));
  569.                             if(historico.verifica(hist) == 0){
  570.                                 historico.addVezes(hist,last.get(i));
  571.                             }
  572.                             else{
  573.                                 historico.add(hist,(int) SDBMHash(comando));
  574.                             }
  575.                             //contador = historico.colisao();
  576.                             break;
  577.                         }
  578.                         if(resposta == 2){
  579.                             if(resposta == 2 && i == 4){
  580.                                 System.out.println("Deseja adicionar a palavra ao dicionario? Prima 1 para adicionar");
  581.                                 resposta = scanner.nextInt();
  582.                                 if(resposta == 1){
  583.                                     Word nova = new Word(comando,0);
  584.                                     dicio.add(nova, (int) SDBMHash(word.palavra));
  585.                                     System.out.println("Palavra adicionado");
  586.                                 }
  587.                                 else break;
  588.                             }
  589.                             else continue;
  590.                         }
  591.                         if(resposta != 1 && resposta != 2){
  592.                             System.out.println("Insira outro numero");
  593.                             i = i-1;
  594.                         }
  595.                     }
  596.                 }
  597.             }
  598.         }while(true);      
  599.     }
  600.    
  601.     static String readLn (int maxLg){
  602.         byte lin[] = new byte [maxLg];
  603.         int lg = 0, car = -1;
  604.         String line = "";
  605.         try {
  606.             while (lg < maxLg){
  607.                 car = System.in.read();
  608.                 if ((car < 0) || (car == '\n')) break;
  609.                 lin [lg++] += car;
  610.             }
  611.         }
  612.         catch (IOException e){
  613.             return (null);
  614.         }
  615.         if ((car < 0) && (lg == 0)) return (null);
  616.         return (new String (lin, 0, lg));
  617.     }
  618.    
  619.     static long SDBMHash(String str){
  620.       long hash = 0;
  621.  
  622.       for(int i = 0; i < str.length(); i++){
  623.          hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;
  624.       }
  625.       if(hash<-1){
  626.           hash *=-1;
  627.       }
  628.       return hash;
  629.    }
  630.    
  631.     static void Switch(Dicio dicio,Word word,LinkedList<Word> Lista){
  632.         for(int i = 0 ;i < word.palavra.length()-1;i++){
  633.             for (int j = 0; j < word.palavra.length(); j++) {
  634.                 char[] letras = word.palavra.toCharArray();                
  635.                 char temp = letras[j];
  636.                 letras[j] = letras[i];
  637.                 letras[i] = temp;
  638.                
  639.                 Word nova = new Word(new String(letras),0);
  640.                 //System.out.println(nova.palavra);
  641.                 if(dicio.verifica(nova) == 0){
  642.                     int condicao = 1;
  643.                     for (Word s:Lista){
  644.                         if(s.palavra.equals(nova.palavra)){
  645.                             condicao = 0;
  646.                         }
  647.                     }
  648.                     if(condicao == 1){
  649.                         //System.out.println(nova.palavra);
  650.                         nova.frequencia = dicio.getFrequencia(nova.palavra);
  651.                         Lista.add(nova);
  652.                     }
  653.                 }
  654.                 Add2(dicio,nova,Lista);
  655.                 Change2(dicio,nova,Lista);
  656.                 Sub2(dicio,nova,Lista);
  657.  
  658.             }
  659.         }
  660.     }
  661.    
  662.     static void Switch2(Dicio dicio,Word word,LinkedList<Word> Lista){
  663.         for(int i = 0 ;i < word.palavra.length()-1;i++){
  664.             for (int j = 0; j < word.palavra.length(); j++) {
  665.                 char[] letras = word.palavra.toCharArray();                
  666.                 char temp = letras[j];
  667.                 letras[j] = letras[i];
  668.                 letras[i] = temp;
  669.                
  670.                 Word nova = new Word(new String(letras),0);
  671.                 //System.out.println(nova.palavra);
  672.                 if(dicio.verifica(nova) == 0){
  673.                     int condicao = 1;
  674.                     for (Word s:Lista){
  675.                         if(s.palavra.equals(nova.palavra)){
  676.                             condicao = 0;
  677.                         }
  678.                     }
  679.                     if(condicao == 1){
  680.                         //System.out.println(nova.palavra);
  681.                         nova.frequencia = dicio.getFrequencia(nova.palavra);
  682.                         Lista.add(nova);
  683.                     }
  684.                 }
  685.             }
  686.         }
  687.     }
  688.    
  689.     static void Change(Dicio dicio,Word word,LinkedList<Word> Lista){
  690.         String letras = "abcdefghijklmnopqrstuvwxyz";
  691.         for(int i =0 ;i<word.palavra.length();i++){
  692.             for (int j = 0; j < letras.length(); j++) {
  693.                 Word temp;
  694.                 if(i == 0){
  695.                     temp = new Word(letras.charAt(j) + word.palavra.substring(i+1, word.palavra.length()),0);
  696.                 }
  697.                 if(i>0 && i < word.palavra.length()){
  698.                     temp = new Word(word.palavra.substring(0, i-1) + letras.charAt(j) + word.palavra.substring(i, word.palavra.length()),0);
  699.                 }
  700.                 else{
  701.                     temp = new Word(word.palavra.substring(0, word.palavra.length()-1) + letras.charAt(j),0);
  702.                 }
  703.                 //System.out.println(nova.palavra);
  704.                 if(dicio.verifica(temp) == 0){
  705.                     int condicao = 1;
  706.                     for (Word s:Lista){
  707.                         if(s.palavra.equals(temp.palavra)){
  708.                             condicao = 0;
  709.                         }
  710.                     }
  711.                     if(condicao == 1){
  712.                         //System.out.println(nova.palavra);
  713.                         temp.frequencia = dicio.getFrequencia(temp.palavra);
  714.                         Lista.add(temp);
  715.                     }
  716.                 }
  717.                
  718.                 Add2(dicio,temp,Lista);
  719.                 Switch2(dicio,temp,Lista);
  720.                 Change2(dicio,temp,Lista);
  721.                 Sub2(dicio,temp,Lista);
  722.             }
  723.         }
  724.     }
  725.    
  726.     static void Change2(Dicio dicio,Word word,LinkedList<Word> Lista){
  727.         String letras = "abcdefghijklmnopqrstuvwxyz";
  728.         for(int i =0 ;i<word.palavra.length();i++){
  729.             for (int j = 0; j < letras.length(); j++) {
  730.                 Word temp;
  731.                 if(i == 0){
  732.                     temp = new Word(letras.charAt(j) + word.palavra.substring(i+1, word.palavra.length()),0);
  733.                 }
  734.                 if(i>0 && i < word.palavra.length()){
  735.                     temp = new Word(word.palavra.substring(0, i-1) + letras.charAt(j) + word.palavra.substring(i, word.palavra.length()),0);
  736.                 }
  737.                 else{
  738.                     temp = new Word(word.palavra.substring(0, word.palavra.length()-1) + letras.charAt(j),0);
  739.                 }
  740.                 //System.out.println(nova.palavra);
  741.                 if(dicio.verifica(temp) == 0){
  742.                     int condicao = 1;
  743.                     for (Word s:Lista){
  744.                         if(s.palavra.equals(temp.palavra)){
  745.                             condicao = 0;
  746.                         }
  747.                     }
  748.                     if(condicao == 1){
  749.                         //System.out.println(nova.palavra);
  750.                         temp.frequencia = dicio.getFrequencia(temp.palavra);
  751.                         Lista.add(temp);
  752.                     }
  753.                 }
  754.             }
  755.         }
  756.     }
  757.    
  758.     static void Add(Dicio dicio,Word word,LinkedList<Word> Lista){
  759.         String letras = "abcdefghijklmnopqrstuvwxyz";
  760.         for(int i =0 ;i<word.palavra.length();i++){
  761.             for (int j = 0; j < letras.length(); j++) {
  762.                 Word temp = new Word(word.palavra.substring(0, i) + letras.charAt(j) + word.palavra.substring(i, word.palavra.length()),0);
  763.                 //System.out.println(nova.palavra);
  764.                 if(dicio.verifica(temp) == 0){
  765.                     int condicao = 1;
  766.                     for (Word s:Lista){
  767.                         if(s.palavra.equals(temp.palavra)){
  768.                             condicao = 0;
  769.                         }
  770.                     }
  771.                     if(condicao == 1){
  772.                         //System.out.println(nova.palavra);
  773.                         temp.frequencia = dicio.getFrequencia(temp.palavra);
  774.                         Lista.add(temp);
  775.                     }
  776.                 }
  777.                 Add2(dicio,temp,Lista);
  778.                 Switch2(dicio,temp,Lista);
  779.                 Change2(dicio,temp,Lista);
  780.             }
  781.         }
  782.     }
  783.    
  784.     static void Add2(Dicio dicio,Word word,LinkedList<Word> Lista){
  785.         String letras = "abcdefghijklmnopqrstuvwxyz";
  786.         for(int i =0 ;i<word.palavra.length();i++){
  787.             for (int j = 0; j < letras.length(); j++) {
  788.                 Word temp = new Word(word.palavra.substring(0, i) + letras.charAt(j) + word.palavra.substring(i, word.palavra.length()),0);
  789.                 //System.out.println(nova.palavra);
  790.                 if(dicio.verifica(temp) == 0){
  791.                     int condicao = 1;
  792.                     for (Word s:Lista){
  793.                         if(s.palavra.equals(temp.palavra)){
  794.                             condicao = 0;
  795.                         }
  796.                     }
  797.                     if(condicao == 1){
  798.                         //System.out.println(nova.palavra);
  799.                         temp.frequencia = dicio.getFrequencia(temp.palavra);
  800.                         Lista.add(temp);
  801.                     }
  802.                 }
  803.             }
  804.         }
  805.     }
  806.    
  807.     static void Sub(Dicio dicio,Word word,LinkedList<Word> Lista){
  808.         if(word.palavra.length() > 2){
  809.             for(int i=0;i<word.palavra.length();i++){
  810.                 Word temp = new Word(word.palavra.substring(0,i) + word.palavra.substring(i+1,word.palavra.length()),0);
  811.                 //System.out.println(nova.palavra);
  812.                 if(dicio.verifica(temp) == 0){
  813.                     int condicao = 1;
  814.                     for (Word s:Lista){
  815.                         if(s.palavra.equals(temp.palavra)){
  816.                             condicao = 0;
  817.                         }
  818.                     }
  819.                     if(condicao == 1){
  820.                         //System.out.println(nova.palavra);
  821.                         temp.frequencia = dicio.getFrequencia(temp.palavra);
  822.                         Lista.add(temp);
  823.                     }
  824.                 }
  825.                 Switch2(dicio,temp,Lista);
  826.                 Change2(dicio,temp,Lista);
  827.                 Sub2(dicio,temp,Lista);
  828.             }
  829.         }
  830.     }
  831.    
  832.     static void Sub2(Dicio dicio,Word word,LinkedList<Word> Lista){
  833.         if(word.palavra.length() > 2){
  834.             for(int i=0;i<word.palavra.length();i++){
  835.                 Word nova = new Word(word.palavra.substring(0,i) + word.palavra.substring(i+1,word.palavra.length()),0);
  836.                 //System.out.println(nova.palavra);
  837.                 if(dicio.verifica(nova) == 0){
  838.                     int condicao = 1;
  839.                     for (Word s:Lista){
  840.                         if(s.palavra.equals(nova.palavra)){
  841.                             condicao = 0;
  842.                         }
  843.                     }
  844.                     if(condicao == 1){
  845.                         //System.out.println(nova.palavra);
  846.                         nova.frequencia = dicio.getFrequencia(nova.palavra);
  847.                         Lista.add(nova);
  848.                     }
  849.                 }
  850.             }
  851.         }
  852.     }
  853.    
  854.     static void QuickSort(LinkedList<Word> Array,int minimo,int maximo){
  855.         int i = minimo;
  856.         int j = maximo;
  857.         Word pivot = Array.get(minimo + ((maximo-minimo)/2));
  858.  
  859.         while (i <= j) {
  860.             while(Array.get(i).frequencia > pivot.frequencia) {
  861.                 i++;
  862.             }
  863.             while(Array.get(j).frequencia < pivot.frequencia) {
  864.                 j--;
  865.             }
  866.             if (i <= j) {
  867.                 Word temp = Array.get(i);
  868.                 Array.set(i, Array.get(j));
  869.                 Array.set(j, temp);
  870.                 i++;
  871.                 j--;
  872.             }
  873.         }
  874.         if (minimo < j){
  875.             QuickSort(Array,minimo,j);
  876.         }
  877.         if (i < maximo){
  878.             QuickSort(Array,i,maximo);
  879.         }
  880.     }
  881. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement