Всем привет!
Взял за основу намеки на решение в одном из ответов к вопросу об этой же задаче, так как мое решение было очень похожим по сути.
Помогите понять, на каком датасете программа отработает не правильно, что бы я мог сам найти ошибку? Я сам напридумывал датасетов, но везде, вроде как, работает корректно.
А вообще, если команда JavaRush это прочтет, то у меня есть пожелание - если программа не проходит валидацию, показывайте хотя бы на каком датасете она не проходит. На ошибке легче учиться, если ты видишь в чем ты ошибаешься :)
package com.javarush.task.task19.task1916;
import javax.sound.sampled.Line;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fileBufferedReader1 = new BufferedReader(new FileReader(reader.readLine()));
BufferedReader fileBufferedReader2 = new BufferedReader(new FileReader(reader.readLine()));
reader.close();
ArrayList<LineItem> lines = new ArrayList<LineItem>();
ArrayList<String> file1Lines = new ArrayList<>();
ArrayList<String> file2Lines = new ArrayList<>();
//HashSet<String> mergedFiles = new HashSet<>();
while (true){
String line = fileBufferedReader1.readLine();
if (line == null){
break;
}
file1Lines.add(line);
//mergedFiles.add(line);
}
while (true){
String line = fileBufferedReader2.readLine();
if (line == null){
break;
}
file2Lines.add(line);
//mergedFiles.add(line);
}
fileBufferedReader1.close();
fileBufferedReader2.close();
for (int i = 0; i < file1Lines.size() && i < file2Lines.size(); i++){
try{
if (file1Lines.get(i).equals(file2Lines.get(i))){
lines.add(new LineItem(Type.SAME, file2Lines.get(i)));
file1Lines.remove(i);
file2Lines.remove(i);
i--;
}
else if (file1Lines.get(i + 1).equals(file2Lines.get(i))){
lines.add(new LineItem(Type.REMOVED, file1Lines.get(i)));
file1Lines.remove(i);
i--;
}
else if (file1Lines.get(i).equals(file2Lines.get(i + 1))){
lines.add(new LineItem(Type.ADDED, file2Lines.get(i)));
file2Lines.remove(i);
i--;
}
}catch (Exception e){}
}
while (!file1Lines.isEmpty()){
lines.add(new LineItem(Type.REMOVED, file1Lines.get(0)));
file1Lines.remove(0);
}
while (!file2Lines.isEmpty()){
lines.add(new LineItem(Type.ADDED, file2Lines.get(0)));
file2Lines.remove(0);
}
// for (LineItem line: lines){
// System.out.println(line.type + " " + line.line);
// }
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}