Toto je starší verze dokumentu!


Zkouška

Zadání https://cw.felk.cvut.cz/courses/a4m33pal/task.php?task=incomplete_automaton

11/12 - zaseklo se to při vypisování výsledků

package pal;
 
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;
 
public class Main {
 
    public static int countStates;
    public static int alphabetSize;
    public static int countFinals;
    public static int countPositive;
    public static int countNegative;
    public static int wordSize;
    public static int[][] automat;
    public static int[][] inStates;
    public static int countAllWords;
    public static int aValue = (int) 'a';
 
    public static void main(String[] args) throws IOException {
        //args = new String[]{"pub10.in"};
        BufferedReader br = (args.length == 0)
                ? new BufferedReader(new InputStreamReader(System.in))
                : new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
 
        StringTokenizer configuration = new StringTokenizer(br.readLine());
        countStates = Integer.parseInt(configuration.nextToken());
        alphabetSize = Integer.parseInt(configuration.nextToken());
        countFinals = Integer.parseInt(configuration.nextToken());
        countPositive = Integer.parseInt(configuration.nextToken());
        countNegative = Integer.parseInt(configuration.nextToken());
        wordSize = Integer.parseInt(configuration.nextToken());
        automat = new int[countStates][alphabetSize];
        countAllWords = countPositive + countNegative;
        inStates = new int[countAllWords][];
        String[] in;
        //vytvareni automatu
        for (int i = 0; i < countStates; i++) {
            in = br.readLine().split(" ");
            for (int j = 0; j < alphabetSize; j++) {
                automat[i][j] = Integer.parseInt(in[j+1]);
            }
        }
        for (int i = 0; i < countAllWords; i++) {
            inStates[i] = MapWord(br.readLine());
        }
        for (int s = 0; s < countStates; s++) {
            int[] outStates = new int[countAllWords];
            for (int ss = 0; ss < countAllWords; ss++) {
                outStates[ss] = s;
            }
            for (int i = 0; i < wordSize; i++) {
                for (int si = 0; si < countAllWords; si++) {
                    outStates[si] = automat[outStates[si]][inStates[si][i]];                  
                }
            }
            testOutStates(outStates, s);
 
        }
    }
    public static void testOutStates(int[] outStates, int index) {
        StringBuilder sb = new StringBuilder();
        HashSet<Integer> hs = new HashSet<>(countAllWords);
//        prvnich P indexu pole musi byt presne F ruznych hodnot
//        ve zbylych indexch(N) nesmi bzyt index z prvnich P
        for (int i = 0; i < countPositive; i++) {
            hs.add(outStates[i]);
        }
        if (hs.size() == countFinals) {
            for (int i = countPositive; i < countAllWords; i++) {
                if (hs.contains(outStates[i])) {
                    return;
                } 
            }
            //vypis
            ArrayList ar = new ArrayList<>(hs);
            Collections.sort(ar); //vzestupne
            Integer o = index;
            String out = o.toString();
            sb.append(out);
            for (Object a : ar) {
                  sb.append(" ");
                sb.append(a.toString());
            }
            sb.append("\n");
            System.out.print(sb);
        }
 
    }
 
    public static int[] MapWord(String word) {
        int[] res = new int[wordSize];
        for (int i = 0; i < wordSize; i++) {
            res[i] = (int) word.charAt(i) - aValue;
        }
        return res;
    }
}
courses/a4m33pal/zkouska_2015_5.1422278201.txt.gz · Poslední úprava: 2025/01/03 18:24 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0