Обращенные слова

  • 12
  • Недоступна
В методе main с консоли считать имя файла, который содержит слова, разделенные пробелами. Найти в тексте все пары слов, которые являются обращением друг друга. Добавить их в result. Использовать StringBuilder. Кодировка файла - UTF-8. Пример содержимого файла рот тор торт о о тот тот тот Вывод: рот тор о о тот тот
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (132)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Даниил24 уровень
16 февраля, 14:55
Для тех кто только что зашёл в тупик и не понимает что тут не работает - скажу: 1) убедитесь что файл который вы используете для тестов имел кодировку UTF-8. Я использовал такой способ - сохранил файл "блокнота" через "Сохранить как" и в открывшемся окне внизу в поле "Кодировка" поставить необходимое значение. 2) сохранённый файл будет иметь специальный служебный символ
"\uFEFF"
который визуально ни в файле ни в консоли видно не было, по этому длинна первого слова (если оно начинается с самого начала файла без пробелов или переносов строки) будет на 1 больше. В общем час не мог уговорить выводить русские буквы пока не изменил кодировку и файла и настроек ИДЕИ. Потом больше часа не мог понять почему не добавляется первая пара (причина 2).
Pavlic Morozov (pashok09i)25 уровень, Екатеринбург
10 февраля, 17:31
обязательно добавьте проверку на одиночные слова, которые читаются одинаково в двух направлениях(о, тот, поп итд) долго тупил пока не увидел что при вводе: рот тор торт о тот вывод: рот тор о о тот тот
Artur28 уровень
6 февраля, 10:57
.split("\\s+") для строки и .reverse() для стринг буффера - это 2 ключевых метода с помощью которых задача решается довольно просто
gtfo27 уровень, Санкт-Петербург
21 января, 20:41
21.11.2017 года решивших эту задачу было 4829. Сегодня 21.01.2019, спустя 1 год и 2 месяца ее решило 6224. За больше чем год ее прошло 1395 человек.
RuslanN31 уровень, Нижний Новгород
7 января, 17:00
ППЦ!!! два дня!!! два дня просидел. А ошибка в том, что я убирал маркер после того как прочитаю из файла , а не во время чтения!
Veronika26 уровень, Москва
24 декабря 2018, 18:51
При чтении с текстового файла и последующем выводе столкнулась с проблемой: не выводит первую пару слов из примера ("рот тор"). Алгоритм решения вроде верный, при нарезке в массив/лист слова добавляются без лишних символов, казалось бы... Оказалось, что при чтении программа вместе с первым словом считывает BOM-символ (он же magic number, он же: https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2) Интересным оказался тот факт, что длина первого слова при этом составляет =4! Смотрите ниже: Если же мы добавим красную строку, то символ останется, а слово приобретет привычную глазу длину (=3). Откуда следует, что его ("\uFEFF") нужно убрать (ниже спойлер!). Спасибо комментариям и разделу помощи, иначе битва с задачей растянулась бы на несколько дней:
Pavel Soros23 уровень
20 декабря 2018, 14:30
Если вы забираете данные из файла методом file_reader.readLine(), то обратите внимание, что в конце первой строки, которая находится в файле, нет пробела, то есть при использовании метода split(" "), вы не получите корректного разделения строки по словам, последнее слово в первой строке и первое слово во второй строке не разделятся. Добавьте пробел в конец строки самостоятельно file_reader.readLine() + " ".
Andrei Pilipuk26 уровень, Киев
1 декабря 2018, 08:18
Я сделал это!!!! Сравнивал слова просто по сумме байт. Сумма байт слов (в том числе инвертируемых) равна.
Timur28 уровень, Москва
1 декабря 2018, 21:39
Как валидатор пропустил? у слов tor и otr сумма байт тоже будет равна. но это не зеркальные слова.
Andrei Pilipuk26 уровень, Киев
2 декабря 2018, 07:50
ага точно, но валидатор пропускает... Иначе при равенстве байт можно обратным циклом символы в каждом слове проверить...
Дмитрий К.28 уровень, Иркутск
30 января, 06:53
У Васи было в кармане 19 рублей, у Пети в кармане было 91 рубль, в их карманах было денег поровну ...
Alexey Maleev31 уровень
30 ноября 2018, 09:42
Да... убил несколько попыток, Вроде всё верно. а валидатор морщится про вывод. Полез читать каменты - нашел , что пары могут повторяться. Вот она волшебная таблетка...
Джонни35 уровень
14 ноября 2018, 19:43
Мой способ был таким: Проходился циклом по коллекции со словами, а когда находил пары - добавлял их в результат и сразу же удалял. Цикл же работал до тех пор, пока список не стал пустым. Задача очень понравилась! Почему нельзя было сделать нормальный конструктор класса Pair, чтобы добавлять пару и сразу присваивать значения её полям...? Мда, риторический вопрос. Всем удачи!
Николай Малинчик36 уровень, Санкт-Петербург
1 февраля, 14:20
а что вам помешало сделать помимо конструктора по умолчанию, сделать с параметрами?) валидатор принял без проблем)