Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.86 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.HashSet;
  3. /*
  4. Klasa i metoda koju poziva ispitni sustav SPPRUT.
  5.  
  6. Nemojte mijenjati:
  7.   - naziv datoteke
  8.   - naziv klase
  9.   - parametre konstruktora klase (konstruktor se poziva bez parametara)
  10.   - naziv metode
  11.   - broj ulaznih parametara
  12.   - tipove ulaznih parametara
  13.   - tip povratne vrijednosti
  14.  
  15. Ulazni parametri:
  16.   definicijaPA: string s definicijom funkcije prijelaza PA
  17.                 oblikovan prema uputama na FERWebu
  18.   ulazniNiz: string s nizom znakova za koji PA provjerava da li se prihvaca
  19.  
  20. Povratna vrijednost:
  21.   int: 1 ako PA prihvaca niz
  22.        0 ako PA ne prihvaca niz
  23. */
  24.  
  25.  
  26. public class utrlab2 {
  27.  
  28.     public static void epsilon(HashSet<ArrayList<String>> konfiguracije, ArrayList<String[]> prijelazi) {
  29.         HashSet <ArrayList<String>> tempKonf = new HashSet<ArrayList<String>>();
  30.         String stog;
  31.         String vrhStoga;
  32.        
  33.         for (ArrayList<String> konfiguracija:konfiguracije) {
  34.            
  35.             if (konfiguracija.get(1).length() >= 1) {
  36.                 vrhStoga = konfiguracija.get(1).substring(0,1);
  37.             } else {
  38.                 vrhStoga = "";
  39.             }
  40.             if (konfiguracija.get(1).length() >= 1) {
  41.                 stog = konfiguracija.get(1).substring(1);
  42.             } else {
  43.                 stog = "";
  44.             }
  45.             for (String[] prijelaz:prijelazi) {
  46.                 String[] tempProvjeraPrijelaza = prijelaz[0].split(",");
  47.                 if (tempProvjeraPrijelaza[0].equals(konfiguracija.get(0)) && tempProvjeraPrijelaza[1].equals("$") && vrhStoga.equals(tempProvjeraPrijelaza[2])){
  48.                     String[] novekonfiguracije = prijelaz[1].split("#");
  49.                        
  50.                     for (String novakonfiguracija:novekonfiguracije) {
  51.                        
  52.                         String[] tempKonfiguracija = novakonfiguracija.split(",");
  53.  
  54.                        
  55.                         String noviStog = new String();
  56.                         if (tempKonfiguracija[1].equals("$")) {
  57.                             noviStog = stog;
  58.                         } else {
  59.                             noviStog = tempKonfiguracija[1].concat(stog);
  60.                         }
  61.                        
  62.                         String[] konfiguracija_za_dodavanje = new String[2];
  63.                         konfiguracija_za_dodavanje[0] = tempKonfiguracija[0];
  64.                         konfiguracija_za_dodavanje[1] = noviStog;
  65.                        
  66.                         ArrayList<String> prijenos = new ArrayList<String>();
  67.                         prijenos.add(konfiguracija_za_dodavanje[0]);
  68.                         prijenos.add(konfiguracija_za_dodavanje[1]);
  69.                        
  70.                        
  71.                        
  72.                         if (!konfiguracija_za_dodavanje[1].equals("")) {
  73.                             tempKonf.add(prijenos);
  74.                         }
  75.                        
  76.                     }
  77.                    
  78.                 }
  79.                
  80.             }
  81.            
  82.         }
  83.        
  84.         if (tempKonf.equals(konfiguracije)) return;
  85.        
  86.         epsilon(tempKonf, prijelazi);
  87.        
  88.         for (ArrayList<String> el:tempKonf) {
  89.             konfiguracije.add(el);
  90.         }
  91.     }
  92.    
  93.     public utrlab2() {}
  94.    
  95.     public int utrlab2_f(String definicijaPA, String ulazniNiz) {
  96.        
  97.         ArrayList<String> skupStanja = new ArrayList<String>();
  98.        
  99.         ArrayList<String> prihZnak = new ArrayList<String>();
  100.        
  101.         ArrayList<String> znakoviStoga = new ArrayList<String>();
  102.        
  103.         ArrayList<String> prihStanja = new ArrayList<String>();
  104.        
  105.         ArrayList<String[]> prijelazi = new ArrayList<String[]>();
  106.        
  107.         String[] pocKonfiguracija = new String[2];
  108.        
  109.         HashSet<ArrayList<String>> trenKonf = new HashSet<ArrayList<String>>();
  110.        
  111.        
  112.        
  113.         String definicija = definicijaPA;
  114.        
  115.        
  116.         String zadaniNiz = ulazniNiz;
  117.        
  118.        
  119.         definicija = definicija.substring(1);
  120.        
  121.         String splitanadefinicija[] = definicija.split("%");
  122.        
  123.         String temp[] = splitanadefinicija[0].split(",");
  124.        
  125.         for (String el:temp) {
  126.             skupStanja.add(el);
  127.         }
  128.        
  129.         temp = splitanadefinicija[1].split(",");
  130.        
  131.         for (String el:temp) {
  132.             prihZnak.add(el);
  133.         }
  134.         temp = splitanadefinicija[2].split(",");
  135.        
  136.         for (String el:temp) {
  137.             znakoviStoga.add(el);
  138.         }
  139.        
  140.         pocKonfiguracija[0]=splitanadefinicija[3];
  141.        
  142.         pocKonfiguracija[1] = splitanadefinicija[4];
  143.            
  144.         temp = splitanadefinicija[5].split(",");
  145.        
  146.         for (String el:temp) {
  147.             prihStanja.add(el);
  148.         }
  149.        
  150.         int i = 0;
  151.         for ( i = 6; i <= (splitanadefinicija.length - 1); i++ ) {
  152.             prijelazi.add(splitanadefinicija[i].split("->"));
  153.         }
  154.        
  155.         String[] tempSplitaniNiz = zadaniNiz.split("");
  156.         int duzina = tempSplitaniNiz.length - 1;
  157.         String[] splitaniNiz = new String[duzina];
  158.         System.arraycopy(tempSplitaniNiz, 1, splitaniNiz, 0, duzina);
  159.         ArrayList<String> pockonfa = new ArrayList<String>();
  160.         pockonfa.add(pocKonfiguracija[0]);
  161.         pockonfa.add(pocKonfiguracija[1]);
  162.         trenKonf.add(pockonfa);
  163.         epsilon(trenKonf, prijelazi);
  164.         int prijelaz_se_desio;
  165.         String vrhStoga;
  166.         String noviStog;
  167.         String emptystring = new String("");
  168.        
  169.         for (String znak:splitaniNiz) {
  170.             HashSet<ArrayList<String>> sljedKonfiguracije = new HashSet<ArrayList<String>>();
  171.            
  172.             for (ArrayList<String> konfiguracija:trenKonf) {
  173.                
  174.                 if (konfiguracija.get(0).length() >= 1) {
  175.                     noviStog = konfiguracija.get(1).substring(1);
  176.                 } else {
  177.                     noviStog = emptystring;
  178.                 }
  179.                
  180.                 if (konfiguracija.get(1).length() >= 1) {
  181.                     vrhStoga =  konfiguracija.get(1).substring(0,1);
  182.                 } else {
  183.                     vrhStoga = emptystring;
  184.                 }
  185.                
  186.                 prijelaz_se_desio = 0;
  187.                
  188.                 for (String[] prijelaz:prijelazi) {
  189.                    
  190.                     prijelaz_se_desio = 0;
  191.                    
  192.                     String[] tempProvjeraPrijelaza = prijelaz[0].split(",");
  193.                    
  194.                     if ( (tempProvjeraPrijelaza[0].equals(konfiguracija.get(0))) && (tempProvjeraPrijelaza[1].equals(znak)) && (tempProvjeraPrijelaza[2].equals(vrhStoga)) ) {
  195.                        
  196.                         String novekonfiguracije[] = prijelaz[1].split("#");
  197.                         for (String novakonfiguracija:novekonfiguracije) {
  198.                            
  199.                             String[] tempKonfiguracija  = novakonfiguracija.split(",");
  200.                             String stog = new String();
  201.                            
  202.                             if (tempKonfiguracija[1].equals("$")) {
  203.                                 stog = noviStog;
  204.                             } else {
  205.                                 stog = tempKonfiguracija[1].concat(noviStog);
  206.                             }
  207.                            
  208.                             String[] konfiguracija_za_dodavanje = new String[2];
  209.                             konfiguracija_za_dodavanje[0] = tempKonfiguracija[0];
  210.                             konfiguracija_za_dodavanje[1] = stog;
  211.                             ArrayList<String> prijenos = new ArrayList<String>();
  212.                             prijenos.add(konfiguracija_za_dodavanje[0]);
  213.                             prijenos.add(konfiguracija_za_dodavanje[1]);
  214.                            
  215.                             if (!konfiguracija_za_dodavanje[1].equals(emptystring)){
  216.                                 sljedKonfiguracije.add(prijenos);
  217.                             }
  218.                             prijelaz_se_desio = 1;
  219.                         }  
  220.                         break;
  221.                     }
  222.                 }
  223.                
  224.                 if (prijelaz_se_desio == 0) {
  225.                    
  226.                     konfiguracija.add(1, noviStog);
  227.                     if (!konfiguracija.get(1).equals(emptystring)) {
  228.                         sljedKonfiguracije.add(konfiguracija);
  229.                     }
  230.                 }
  231.             }
  232.            
  233.             epsilon(sljedKonfiguracije, prijelazi);
  234.            
  235.             if (!sljedKonfiguracije.isEmpty()) {
  236.                 trenKonf.clear();
  237.                
  238.                 for (ArrayList<String> el:sljedKonfiguracije) {
  239.                     if (!el.get(1).equals(emptystring)) {
  240.                     trenKonf.add(el);
  241.                     }
  242.                 }
  243.             } else {
  244.                 trenKonf.clear();
  245.             }
  246.         }
  247.        
  248.         int prih = 0;
  249.        
  250.         for (ArrayList<String> el:trenKonf) {
  251.             if (prihStanja.contains(el.get(0))) {
  252.                 prih = 1;
  253.             }
  254.         }
  255.        
  256.         if (prih == 0 ) {
  257.             return 0;
  258.         } else {
  259.             return 1;
  260.         }
  261.     }
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement