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

  • 10
  • Недоступна
Считайте с консоли два имени файла — file1, file2. Эти файлы содержат строки, причём file2 является обновленной версией file1, часть строк совпадают. Создайте объединенную версию строк и запишите их в список lines.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (283)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Wladyslaw20 уровень
позавчера, 16:30
Главное - внимательно прочитать и понять условие. На самом деле все довольно логично описано, просто нужно сесть и поразмышлять минутку-другую. Если строки на соответствующих позициях равны - значит изменений не было Если левая строка на позиции N равна правой строке на позиции N+1 - значит правая строка на позиции N была добавлена Исходя из условия : "Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME." Дальше можно не проверять - значит левая строка на позиции N была удалена. Решил рекурсивно Базис рекурсии - конец строк в одном из файлов. Все строки грузил в память, как-то изначально не догнал как это сделать не храня все в памяти, а после прохождения валидации уже и нет особого желания. Может потом подумаю.
Максим20 уровень, Черкассы
понедельник, 12:46
1. Как сказано ниже, пустых строчек нет, как это нарисовано в условии. 2. Для тех, кому не лень. Задачу можно решить без дополнительных списков. Представьте, что файлы размером в гигабайт. Зачем их в память пихать?
Nordis24 уровень, Санкт-Петербург
суббота, 14:23
Злой я на эту задачу , а точнее на условие. Не буду больше ничего писать , так как плохие слова будут лететь. Минус от меня задаче ! Условие не логичное ужас!
8 августа, 19:09
Если ты сразу полез в комментарии, чтобы понять, что от тебя хотят, то ты молодец и видимо ценишь свое время. Ибо описание к задаче это жесть. Лучше сразу взять пример с задачи и сделать его без пустых строк. Далее попытаюсь объяснить, что хотят от тебя на примере первых 3х строк. Самое главное из задачи (и единственное понятное) это условие двух файлов, что "операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME." строка1 | строка1 - SAME строка2 | строка3 строка3 | строка5 больше с первыми строчками не работаем и проверяем дальше: строка2 | строка3 - REMOVED строка3 | строка5 Объясняю логику в этом месте. Сравнили следующие строки строка2 и строка3 не равны. Это значит либо REMOVED, либо ADDED, но дальше обязательно должен быть SAME. Поэтому сравниваем сначала строку из первого файла со следующей строкой второго файла: строка2 и строка5 не равны Значит должны быть равны следующая строка первого файла и строка второго файла: строка3 и строка3 равны. Значит это REMOVED, в объект записываем строку строка2 и удаляем, больше с ней не работаем. Дальше будет список такой: строка3 | строка3 -SAME строка4 | строка5 Проще всего сделать через ArrayList. Цикл пока один из листов не кончится и три if внутри. Если один лист кончился, а в другом остались строчки то их всех перенести либо REMOVED, либо ADDED. Зависит с какого файла строки 1 и 2
Anton Stezhkin26 уровень
позавчера, 09:52
А как поделиться Вашим комментарием? Я писал заметку как решить эту задачу, но получилось коряво.
позавчера, 18:43
Если вы хотите узнать как это сделать инструментами этого ресурса, то вроде ничего подобного тут пока нет.
Morgan20 уровень, Львов
8 августа, 13:34
Задачка простая - когда ее решил. Алгоритм прост, но мозг два дня отказывался его принять, и понимание того что алгоритм прост и мой мозг ленивая жопа - просто кидало в бешенство. Первый день: 3 часа ушло на понимания условия и написания всего кода, кроме того самого алгоритма в цикле. Второй день: 3 часа с листком и ручкой записывал все итерации цикла, и наконец истина била насильно запхана в мою голову :-). Пробели только с толку сбивают, никакой наглядности в них нет. Сяб @Daos за картинку и Petrusiova за еще один подход к решению.
Максим20 уровень
6 августа, 15:06
Решил эту задачу после прочтения комментов. Если бы не подсмотрел, так бы не понял чего от меня хотя в условии. Задача действительно не сложная, на алгоритмы. Но условие, просто ужас...
Ivan Tyulpin20 уровень, Москва
5 августа, 03:51
Не используйте FileReader c конструктором (File file), а то эта бездушная машина принимать не будет, ругаться будет типо нужен объект потока FileReader /FacePalm
Александр20 уровень, Минск
3 августа, 10:47
Задача не сложная, но интересная и заставляет подумать над логикой. Решал, как и многие, через два ArrayList'a. В условиях отталкивался от SAME. В цикле использовал две переменные для каждого list'a, которые инкрементировал в условиях с добавлением в итоговый список строк ADD и REMOVE, и учитывал эти переменные во всех условиях, чтобы итерация происходила с нужными строками. И так же использовал для выравнивания количества итераций в шапке цикла, а заодно и определения размера итогового списка. Прошло с первой попытки)
Павел22 уровень, Санкт-Петербург
22 июля, 09:35
ребят помогите разобраться....
Павел22 уровень, Санкт-Петербург
22 июля, 18:44
короче как я понял, что, если во стором файле нет строки из первого - ремовид если там и там есть то - саме если в первом нет то - аддид типо:
1 файл   2 файл
А          А                        сами
Б        -                         ремовид
Б         Б                           сами
-          А                          адид
А           -                           ремовид
лучше пример с буквой А, правильно же так типо да?
Artrem22 уровень, Selidovo
20 июля, 13:24
Решил через цикл с условиями. Помогли mark() и reset()
Nordis24 уровень, Санкт-Петербург
суббота, 12:01
Можно в личку , какое было решение через mark() и reset(). Интересно.
Wladyslaw20 уровень
понедельник, 21:43
Тоже глянул бы, если можно. Насколько я понимаю FileReader не поддерживает mark()