Отслеживаем изменения

  • 20
  • Недоступна
Считайте с консоли два имени файла — file1, file2. Эти файлы содержат строки, причём file2 является обновленной версией file1, часть строк совпадают. Создайте объединенную версию строк и запишите их в список lines.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (556)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Филипп 22 уровень
8 января, 23:21
Наконец-то интересная задача попалась.🥳 Побольше бы таких. 10897-й :) Лично мне показалось удобнее ее решать через очереди ArrayDeque<>() - никакой возни с индексами, никакой возни с удалением элементов, pop() и peek() на подсмотреть следующий.
Филипп 22 уровень
9 января, 00:42
Если совсем туго вот простая схема решения через очередь
Ivan Valeryevich 20 уровень, Белгород
3 января, 10:59
Оу шит ребят, первые 3 часа думал как сразу строки читать, вычислять операцию и добавлять в лист, потом появилась идея добавить пустые строки в листы.. Думал до вечера, голова заболела. Сегодня решил)). У нас есть 2 List<String>, первый файл и второй файл. В цикле высчитал на какой индекс нужны пустые строки, добавил, а потом в другом цикле уже сравнения элементарные, если там пусто то то иначе то. Ыыы, обрадовался)) не такой уж и глупый, ахах. Удачи ребята! надеюсь на мысль подкинул)
Taisto 20 уровень
31 декабря 2020, 09:40
в рот мне ноги ну и задачка
Артур 20 уровень, Москва
27 декабря 2020, 20:07
Народ, может кто подскажет особо капризный набор данных для тестирования? Насколько у меня хватило фантазии перепробовал в разных вариантах (REMOVED запись в начале файла, REMOVED в середине, REMOVED запись в конце, в т.ч. на коротких файлах c 2-1 строками и даже 1-0 строкой) . Все равно валидатор выдает "Убедись, что список lines в нужных местах содержит операции REMOVED c нужными строками."
Артур 20 уровень, Москва
29 декабря 2020, 20:27
Так и не понял что не нравилось валидатору. Переписал с нуля ту же логику, только код немного постройнее, прошло.
Артур Прохоренко 22 уровень, Гомель
25 декабря 2020, 13:57
Для тех, кому нужны подсказки по задаче: 1. Записываем содержимое каждого файла в отдельный List<String> 2. Внимательно читаем условие - решение не должно быть универсальным, конкретно лучше ориентироваться по примеру что задано, какой вывод (пустые строки игнорировать). 3. Простая логика, если две сравниваемые строки не равны, значит эта строка равна либо следующей в другом файле, либо следующая в этом файле равна текущей во второй. По сути последовательно три if(). Это подтверждается условием чередования SAME - (ADDED or REMOVED) - SAME - (ADDED or REMOVED) 4. По мне удобнее было делать через while 5. Для собственного тестирования лучше переопределить метод toString класса LineItem и временно брать данные из 2х txt файлов 6. Кто-то делал через удаление из ArrayList сравниваемых элементов. Наверное так можно, но глобально нужно понимать, что это неоптимальное решение с точки зрения использования ресурсов, т.к. при удалении из списка происходит перезапись всего массива в новый, под капотом ArrayList, на больших объемах информации это будет ощутимо. Удачи!
titix 19 уровень
25 декабря 2020, 07:29
Может кто помочь с задачей? проходит оба теста, но последнее условие валидатора не принимает. Может глянет кто код или скинет примеры файлов для тестов? не знаю уже куда копать
Evgeny Vlasov 22 уровень, Москва
23 декабря 2020, 17:03
На будущее подскажу - тут вся проблема в реферальности списка List<ListItem> может быть. Сам сидел 2 дня думал, в чем беда. Если работаете по схеме :
lines.add(Type.SOMETYPE, listStringsFromFile.get(index);
listStringFromFile.remove(index);
Будьте готовы к тому, что компилятор платформы удалит вашу строку и из списка lines (ну не удалит, формально она превратится в null, который валидатору очень не понравится) Вывод: в список lines закидывайте копию, а потом спокойно удаляйте элементы из списков строк, которые получили из файла
Владимир Коземаслов Жук в Муравейнике
18 декабря 2020, 21:44
Не решил с первой попытки потому что была опечатка при закрытии ридера)))) Хотя над дебагом сидел 3 часа. Интересно хоть где-нибудь в рабочих проектах применяется эта херня ???
Kozzy Rock Программист 1С в Фриланс
13 декабря 2020, 18:59
Задача по изучению алгоритмов, а не по изучению Джава
Александр 20 уровень, Москва
12 декабря 2020, 16:52
Да есть же ж !!!! 12 попыток ... уж дала прикурить задача: 6 часов, литр кофе, половина стола занята исписанными листочками с логикой что куда идет и что получится в итоге, проверочные файлы. Очень хорошая задача, условие заставит призадуматься )))