Мой код прошел проверку, я не решил задачу сам, только благодоря комментариям.
Но у меня до сих пор есть недопонимание, что в от нас хотели:
Прошу проверить следующий набор
Файл1:
строка1
строка2
строка3
строка4
строка5
Файл2:
строка1
строка3
строка2
строка0
Результаты работы кода(который прошел валидацию) таков:
SAME строка1
ADDED строка3
SAME строка2
REMOVED строка3
REMOVED строка4
REMOVED строка5
ADDED строка0
Как я понял условие задачи:
У нас есть эталлонный файл1 и есть Файл2, в котором были какие-то изменения по сравнению с первым файлом:
1) Строчка которая была в Файле1, но ее нету во всем Файле2 - значит она удалена.
2) Строка из Файла1 присутствует во всем Файле2 значит она есть - SAME.
3) Если в Файле1 не было строчки како-то, но она появилась во втором файле на любом месте не важно где- значит она ADDED
Прошу пояснить, правильно я понял данные пункты и почему такой вывод? Спасибо
S3R3N1TY
37 уровень
Прошу пояснить Условие/Вывод
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
2 апреля 2019, 14:17
Привет.
Твой вопрос заставил задуматься. На самом деле твой пример с двумя файлами хитрый, и его можно трактовать двояко.
Вообще мой код выдаст такой же результат. Дело в том, что сначала он проверяет, не является ли строка из файла 2 добавленной, а в противном случае считает строку из файла 1 удаленной.
Поиск идет построчно, следующим образом (я буду ориентироваться на свой код, он выдаст такой же результат)
Первые строки совпали, значит они SAME.
SAME строка1
Проверенные строки здесь и далее в последующих сравнениях не участвуют.
Сравниваем вторые строки, они разные. Сравниваем эту строку из 1 файла со следующей (третьей) из 2 файла.* Они одинаковые. Значит вторая строчка в файле 2 добавленная:
ADDED строка3
Вторая строчка в файле 1 по-прежнему не обработанная. Сравниваем ее с третьей строчкой в файле 2, они одинаковые:
SAME строка2
В обоих файлах переходим к следующей строке. "Строка 3" (ф1) не совпадает со "строкой 0" (ф2) и при этом ф2 на этом закончен, т.е. "строка 3" не может совпасть со следующей строкой после "строки 0", значит она REMOVED.
Здесь я поясню. Повторюсь, проверенные до этого строки уже отработаны, т.е. мы не сравниваем "строку 3" из ф1 со "строкой 3" из ф2. И мы не сравниваем со всеми строками файла: на каждом этапе мы сравнили строки, на которые указывает индекс, и если они разные сравнили только со следующей, чтобы выяснить, добавлена была строка или удалена. Поскольку "Строка 3" (ф1) не совпадает ни со "строкой 0"(ф2) ни со следующей строкой после строки 0 (т.к. файл закончился), значит она удаленная.
REMOVED строка3
Аналогичным образом проверяем "строку 4" и "строку 5"
REMOVED строка4
REMOVED строка5
Файл 1 закончился, в файле 2 остались необработанные строки, значит они ADDED:
ADDED строка0
Продолжение ↓
0
hidden #598481
2 апреля 2019, 14:18
Но твой комментарий натолкнул на мысль, что мы могли бы сначала проверять, не является ли строка удаленной, т.е. сравнивать следующую строку из ф1 с текущей строкой из ф2, и уже методом от противного решать, что строка является ADDED. Тогда из поменянных местами строк "строка 2" и "строка 3" статус SAME имели бы уже строки "строка 3", а "строка 2" значилась бы удаленной из первого файла и новой во втором файле.
Вывод был бы таким:
И это тоже соответствует условию задачи (ну кроме того, что по условию после каждого ADDED/REMOVED обязана быть строчка SAME, но здесь это роли не играет).
Ну как-то так получается. Вроде я объяснил, почему такой вывод у твоего алгоритма. 0
S3R3N1TY Java Developer Expert
2 апреля 2019, 15:27
Привет спасибо большое, думаю другим тоже будет интересно узнать. Мне эта задача не очень понравилась, так как не понял в начале условие и соответственно, не понимаю что делать и зачем.
+1