Сообщение валидатора:
Убедись, что список lines в нужных местах содержит операции ADDED c нужными строками.
Код проходит следующие тестовые файлы:
file1 file2 all
test 1 //pass
======================
line1 line1 SAME line1
line2 REMOVED line2
line3 line3 SAME line3
line4 REMOVED line4
line5 line5 SAME line5
line0 ADDED line0
line1 line1 SAME line1
line2 REMOVED line2
line3 line3 SAME line3
line4 ADDED line4
line5 line5 SAME line5
line0 REMOVED line0
test2 //pass
======================
line1 line1 SAME line1
line0 ADDED line0
test3 // pass
======================
line1 ADDED line1
line0 line0 SAME line0
test4 //pass
=======================
line0 line0 SAME line0
line1 REMOVED line1
test5 //pass
=========================
line7 REMOVED line7
line8 line8 SAME line8
test6 //pass
======================
line1 line1 SAME line1
line2 REMOVED line2
line3 line3 SAME line3
line4 ADDED line4
test 7 //pass
=======================
line1 line1 SAME line1
line4 ADDED line4
line3 line3 SAME line3
line5 REMOVED line5
test 8 //pass
=======================
line1 REMOVED line1
line2 line2 SAME line2
line3 ADDED line3
line4 line4 SAME line4
test 9 //pass
========================
line1 ADDED line1
line2 line2 SAME line2
line5 REMOVED line5
line3 line3 SAME line3
test 10 //pass
========================
line1 REMOVED line1
line2 line2 SAME line2
line3 ADDED line3
line4 line4 SAME line4
line5 REMOVED line5
line6 line6 SAME line6
test 11 //pass
=======================
line1 line1 SAME line1
line2 REMOVED line2
line3 line3 SAME line3
line4 REMOVED line4
test 12 //pass
========================
line1 ADDED line1
line2 line2 SAME line2
line3 ADDED line3
line4 line4 SAME line4
line5 ADDED line5
test 13 //pass
=========================
line1 ADDED line1
line2 line2 SAME line2
line3 ADDED line3
test 14 //pass
===========================
line1 REMOVED line1
line2 line2 SAME line2
line3 ADDED line3
line4 line4 SAME line4
test 15 //pass
===========================
line1 line1 SAME line1
line2 ADDED line2
line3 line3 SAME line3
line4 ADDED line4
line5 line5 SAME line5
Думаю какой-то вариант я не закрыл, вопрос какой ?
package com.javarush.task.task19.task1916;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String originalFile = reader.readLine();
String versionFile = reader.readLine();
reader.close();
List<String> original = new ArrayList<>();
List<String> version = new ArrayList<>();
try (BufferedReader in = new BufferedReader(new FileReader(originalFile))) {
String line;
while ((line = in.readLine()) != null) {
original.add(line);
}
}
try (BufferedReader in = new BufferedReader(new FileReader(versionFile))) {
String line;
while ((line = in.readLine()) != null) {
version.add(line);
}
}
int posOrg ;
int posVer;
boolean isRemoved ;
for (posOrg = 0,posVer= 0; posOrg < original.size() && posVer < version.size() ; ) {
if (original.get(posOrg).equals(version.get(posVer))) {
lines.add(new LineItem(Type.SAME, original.get(posOrg)));
posOrg++;
posVer++;
}else{
isRemoved = hasRemoved(original, posOrg, version, posVer);
if (isRemoved) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
lines.add(new LineItem(Type.SAME, version.get(posVer)));
posOrg += 2;
posVer +=1;
}else{
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
lines.add(new LineItem(Type.SAME, original.get(posOrg)));
posOrg += 1;
posVer += 2;
}
}
}
if (version.size() > original.size() && posVer < version.size()) {
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
} else if (original.size() > version.size() && posOrg < original.size()) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
} else if (original.size() == version.size()) {
if (posOrg > posVer) {
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
} else if (posOrg < posVer) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
}
}
// for (LineItem item :
// lines) {
// System.out.println(item);
//
// }
//tests();
}
private static void tests() throws IOException {
String dirPath = "C:\\Users\\Kosta\\Documents\\MyTestFileFolder\\Task1916";
String no = "original";
String nv = "version";
for (int i = 1; i < 13; i++) {
String originalFile = dirPath + File.separator + no + "_" + i + ".txt";
String versionFile = dirPath + File.separator + nv + "_" + i + ".txt";
System.out.println(originalFile);
System.out.println(versionFile);
List<String> original = new ArrayList<>();
List<String> version = new ArrayList<>();
try (BufferedReader in = new BufferedReader(new FileReader(originalFile))) {
String line;
while ((line = in.readLine()) != null) {
original.add(line);
}
}
try (BufferedReader in = new BufferedReader(new FileReader(versionFile))) {
String line;
while ((line = in.readLine()) != null) {
version.add(line);
}
}
int posOrg ;
int posVer;
boolean isRemoved ;
try {
for (posOrg = 0,posVer= 0; posOrg < original.size() && posVer < version.size() ; ) {
if (original.get(posOrg).equals(version.get(posVer))) {
lines.add(new LineItem(Type.SAME, original.get(posOrg)));
posOrg++;
posVer++;
}else{
isRemoved = hasRemoved(original, posOrg, version, posVer);
if (isRemoved) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
lines.add(new LineItem(Type.SAME, version.get(posVer)));
posOrg += 2;
posVer +=1;
}else{
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
lines.add(new LineItem(Type.SAME, original.get(posOrg)));
posOrg += 1;
posVer += 2;
}
}
}
if (version.size() > original.size() && posVer < version.size()) {
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
} else if (original.size() > version.size() && posOrg < original.size()) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
} else if (original.size() == version.size()) {
if (posOrg > posVer) {
lines.add(new LineItem(Type.ADDED, version.get(posVer)));
} else if (posOrg < posVer) {
lines.add(new LineItem(Type.REMOVED, original.get(posOrg)));
}
}
} catch (Exception e) {
System.out.println("DOESN'T PASS TRY AGAIN!!!!!");
continue;
}
System.out.println("Test #####" + i);
for (LineItem item :
lines) {
System.out.println(item);
}
System.out.println("******** PASS\n");
lines.clear();
}
}
private static boolean hasRemoved(List<String> origianl, int posOrg, List<String> version, int posVer) {
if (posOrg >= origianl.size()-1 && posOrg > posVer) {
return false;
}
if (posOrg >= origianl.size()-1 && posOrg == posVer) {
return false;
}
if (posOrg >= origianl.size() - 1 && posVer > posOrg) {
return false;
}
return origianl.get(posOrg+1).equals(version.get(posVer));
}
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;
}
@Override
public String toString() {
return this.type.toString() + " " + this.line;
}
}
}