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

  • 20
  • Недоступна
Считать с консоли 2 пути к файлам - file1, file2. Файлы содержат строки. Так как file2 является обновленной версией file1, то часть строк совпадает. Нужно создать объединенную версию строк из обоих файлов и записать эти строки в список lines.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (745)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Kit Leskinen
Уровень 26
позавчера, 19:50
Комментарии запутали еще больше. Потратил 3 часа на понимание что от меня хотят. Еще не решил, но предположу что:
1. Если строка в обоих файлах совпадает,
то в результат она попадает с операцией (приставкой) SAME.
Например, SAME строка1.
Тут мы сравниваем конкретные строки, последовательно
2. Если строка есть в file1, но ее нет в file2, то считаем, что строку
 удалили и в результат она попадает с операцией (приставкой) REMOVED.
Например, REMOVED строка2.
1. Тут мы уже не сравниваем конкретные строки, а уже определяем есть ли хоть одна такая же строка в другом файле в любом месте "считаем, что строку удалили" в зависимости от варианта хранения строк в своей программе мы от нее как-то избавляемся или игнорируем
3. Если строки нет в file1, но она есть в file2, то считаем,
что строку добавили и в результат она попадает с операцией (приставкой) ADDED.
Например, ADDED строка0.
Тут опять же не сравниваем конкретные строки, а смотрим есть ли в другом файле такая же строка, уже в файле file1, но с учетом тех строк которые были удалены в пункте 2 Резюмируя: - в 1 пункте мы сравниваем строки на тех же местах в обоих файлах - в 2 и 3 пункте мы ищем строку по всему другому файлу, а не как в 1 пункте, из-за этого возникло недопонимание задачи Послезавтра к с новыми силами сделаю еще раз :)
Kit Leskinen
Уровень 26
позавчера, 18:37
Думал почему у меня так странно пример описан в окошке, а потом я его сделал пошире *facepalm*
Иван
Уровень 28
20 мая, 12:13
Не понимаю условие: строка1 и строка1 в одном файле - это 2 одинаковых строки? или цифры закончились после 5? И условие: "Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME" определяется изначально порядком расположения строк в файлах? или это надо сделать в алгоритме?
Taurnil
Уровень 40
5 мая, 18:25
Пришлось основательно пораскинуть мозгами. В итоге родилось решение: 1. Считать файлы в листы строк; 2. Ввести два счетчика индексов листов; 3. Пройтись циклом по условиям ниже, цикл заключен в try; 4. Проверяем эквивалентность двух строк в двух листах равными индексами 5. Проверяем эквивалентность двух строк со смещением индекса в одном или другом листе 6. В конце цикла ловим исключение, выясняем на каком смещении произошел выход за пределы листа, делаем соответствующие выводы Удачи!
Вы решили задачу лучше, чем 61% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 3.81. Всего эту задачу решили 15928 учеников.
Vic
Уровень 19
вчера, 17:26
Решение похожее, только я не применял счётчик, а удалял элементы из списков, а отработка исключений та же.
Paul
Уровень 32
2 мая, 13:31
1.Правильное решение должно уйти в бесконечный цикл (с чего-то вдруг). 2. Результат выполнения программы не посмотреть (см. п.1). 3. Условия вообще не понятные:
if(строка1.equals(строка1)){
    //SAME
}
а дальше пошли лингвистические дебри: ADDED - добавленный REMOVED - удаленный. Слово "добавленный" подразумевает к чему-то прибавить что-то
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)

строка1         строка1            SAME строка1
                      строка0            ADDED строка0  // к пустоте добавили строку
НО!!!!!! В условии написано: "В оригинальном и редактируемом файлах пустых строк нет!" То есть в случае не пустой строки результат должен быть таким?
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)

строка1         строка1            SAME строка1
строка2         строка0           строка2 ADDED строка0
Или нет? Но мы этого никогда не узнаем, потому что правильное решение уходит в бесконечность.
Taurnil
Уровень 40
5 мая, 18:14
Нет, чувак. В условии есть ограничение :
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME.
Из него следует, что после состояния ADDED или REMOVED всегда идет SAME. В твоем примере, соответственно, значение будет зависеть от того, что находится в третьей строке:
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)

строка1         строка1            SAME строка1
строка2         строка0            ADDED строка 0
строка6         строка2            //значение здесь всегда SAME(значит, что следующая строка file2 обязательно будет строка6)
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)

строка1         строка1            SAME строка1
строка2         строка0            REMOVED строка 2
строка0         строка7            //значение здесь всегда SAME(значит, что следующая строка file1 обязательно будет строка7)
Gans Electro
Уровень 36
12 апреля, 04:15
Заметка 1. Итак в итоговый файл добавить нужно не все это, а только то что под записью общий.
оригинальный    редактированный    общий
file1:          file2:             результат:(lines)

строка1         строка1            SAME строка1
строка2                            REMOVED строка2
строка3         строка3            SAME строка3
строка4                            REMOVED строка4
строка5         строка5            SAME строка5
                строка0            ADDED строка0
строка1         строка1            SAME строка1
строка2                            REMOVED строка2
строка3         строка3            SAME строка3
                строка4            ADDED строка4
строка5         строка5            SAME строка5
строка0                            REMOVED строка0
Идея: открыть два счетчика так как: "Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME." все должно работать как маятник
very junior java developer www.codewars.com/r/TTH6EQ
31 марта, 18:02
Операции ADDED и REMOVED не могут идти подряд, они всегда разделены SAME. Кто ещё не решил задачу, обратите внимание на эту строчку, это очень важно.... и сильно облегчает алгоритм сравнения строк.
Taurnil
Уровень 40
5 мая, 18:36
Я так скажу: если этого условия не будет, задачу решить будет вообще невозможно. Потому что будет неоднозначность уже вот здесь:
file1:             file2:

строка1           строка2
строка2           строка1
Если точно неизвестно, что ADDED или REMOVED могут идти только строго через SAME, то здесь можно изменения интерпретировать как угодно:
строка1           строка2      ADDED строка 2
строка2           строка1      SAME строка 1
и даже так:
строка1           строка2      REMOVED строка1 ADDED строка2
строка2           строка1      REMOVED строка2 ADDED строка1
very junior java developer www.codewars.com/r/TTH6EQ
5 мая, 21:42
ну...... , а оно есть, оно есть.... )))
Ольга
Уровень 20
29 марта, 06:56
Так и не смогла победить валидатор. Написала два рабочих решения: одно своё, второе примерно похожее из популярных комментов, протестировала их с десяток раз, но увы.
POG
Уровень 33
24 марта, 11:38
После задач Отслеживаем изменения и Знакомство с тегами хочется только
Viktor Backend Developer в CoreClass
10 марта, 18:05
Долго не мог понять условия задачи правильно, оказывается: 1.Не могут идти подряд ADDED или REMOVED. 2.Операции ADDED и REMOVED всегда разделены. Задачка интересная, решил без коллекций, способом предложенный в комментах, с помощью методов BufferedReader:
mark(1000); - помечает указатель в потоке
reset(); - сбрасывает поток к выставленной метке помеченный с помощью mark()
16 апреля, 10:34
Похоже, это облегчило бы мне жизнь. Я конечно подумала вначале ,что лучше считать строки в цикл и бегать взад вперед по нему, примерно получилось бы у меня как в правильном решении, но мы легких путей не ищем - решила считывать из файлов по одной строке и сразу их проверять, алгоритм замудренный, конечно, получился. Когда пройдет у меня ощущение, что меня эта задача выбесила, то попробую с этими функциями решить))))