Соответствует ли это решение проблемы индексации KWI C архитектуре канала и фильтра? - PullRequest
0 голосов
/ 20 марта 2020

Это решение проблемы индекса KWI C, где список заголовков или предложений должен быть циклически сдвинут, отсортирован по алфавиту, а затем записан в файл. При перемещении заголовка это делается путем удаления первого слова в предложении и добавления его в конец строки. Это повторяется до тех пор, пока не будут созданы все возможные изменения. Это моя попытка решить эту проблему с помощью канала и фильтра, соответствует ли она ограничениям архитектуры канала и фильтра?

При кодировании решения канала и фильтра всегда требуется явное кодирование каналов? Можно ли просто объединить фильтры в вызове метода в основном?

private List<String> input(String filename) {

    List<String> data = new ArrayList<>();

    try {
        BufferedReader br = new BufferedReader(new FileReader(filename));

        String line;

        while((line = br.readLine()) != null) {
            data.add(line);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return data;
}

private List<String> circularShift(List<String> data) {

    List<String> shifts = new ArrayList<>();

    //for every line
    for (String line : data) {

        //create circular shifts
        String[] lineAsArr = line.split(" ");

        List<String> shiftedLine;

        //for every word in line
        for(int i=0; i < lineAsArr.length; i++) {

            //create new circular shift (shiftedLine)
            shiftedLine = new ArrayList<String>();


            //implement shift and add  to shifts shared data
            for (int j = i; j < (i + lineAsArr.length); j++)
            {
                if (j >= lineAsArr.length)
                    shiftedLine.add(lineAsArr[j-lineAsArr.length]);
                else
                    shiftedLine.add(lineAsArr[j]);
            }

            shifts.add(shiftedLine.toString());

        }

    }

    return shifts;
}

private List<String> alphabetise(List<String> shifts) {

    for(int i=0; i < shifts.size(); i++) {
        for(int j=1; j < shifts.size()-i; j++) {

            String line1 = shifts.get(j-1);
            String line2 = shifts.get(j);

            if(line1.toLowerCase().compareTo(line2.toLowerCase()) > 0) {
                String temp = shifts.get(j-1);
                shifts.remove(j-1);
                shifts.add(j,temp);
            }

        }
    }

    return shifts;
}

//FIXME Returns void?
private void output(List<String> shifts) {

    try {
        BufferedWriter bw = new BufferedWriter(new FileWriter("P&FOutput.txt"));

        for (String shift : shifts) {
            bw.write(shift);
            bw.newLine();
        }

        bw.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    Pipeline run = new Pipeline();
    run.output(run.alphabetise(run.circularShift(run.input("ProgramInput"))));
}
...