Составить цепочку слов

  • 24
  • Недоступна
В методе main считай с консоли имя файла, который содержит слова, разделенные пробелом. В методе getLine используя StringBuilder расставь все слова в таком порядке, чтобы последняя буква данного слова совпадала с первой буквой следующего не учитывая регистр. Каждое слово должно участвовать 1 раз.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (489)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Руслан Косюта
Уровень 38, Калуга, Россия
24 сентября, 19:21
Сделал с использованием рекурсивного прохода по графу. Потратил около 2 часов на основы графов и повторение рекурсии, потом 1,5 часа на продумывание и написание алгоритма и кода и + 2,5 часа на исправления во время тестирования разных вариантов входных данных. Итого 6 часов. Не, ну в принципе оно того стоило все же... До этой задачи я смутно мог представить именно технику рекурсивного вызова метода и секрета ее "незацыкленности", теперь же буду смелее рассматривать рекурсию как инструмент решения рабочих задач. у и еще новую структуру данных слегка изучил, что для собесов как минимум полезно.
Димитрий
Уровень 32, Russian Federation
18 сентября, 06:14
Задачи все больше становятся "про битву с валидатором", "а не про решение задачи".
Bohdan
Уровень 42, Poland
9 сентября, 15:26
Эта задача не стоит потраченного на неё времени
milyasow
Уровень 34, Москва, Russian Federation
9 сентября, 09:01
Сама задача не самая сложная, и тело метода getLine(String... words) составляет всего около 30 строк кода. Но по традиции, самое трудное в задаче - разобраться что нужно автору. Приведенные примеры вывода в условии только сбивают с толку, особенно условие, что "(лишних слов нет)" заставляет зациклиться на том, что ВСЕ слова из списка должны выстроиться в цепочку по условиям. Да еще и список из примера способствует этому. Добавьте к нему село Торчино Суздальского района, и поймете, о чем я. Для прохождения валидатора важны два момента: 1) Возможных вариантов составления цепочки может быть не один, это зависит от начального слова, так что нужно обойти весь список слов. 2) Вы должны построить цепочку, и добавить остальные слова из списка в ее конец. Именно так переводится условие: абсолютно все слова из исходного списка могут (и должны!) быть включены в результат Желательно чтобы цепочка была максимальной длины, в идеале - равной входному списку слов. Еще намучился с кодировками, из-за чего получались крякозябры и сравнение слов происходило некорректно, но это уже мелочи, и для валидатора роли не играет. P.S.: Открыл правильное решение, увидел:
private static <T> T getLastElement(List<? extends T> list) {
        return list.get(list.size() - 1);
    }
закрыл правильное решение.
SergGlav
Уровень 24
17 августа, 22:55
По-моему, задача не менее Epic, чем числа Армстронга. Честно, думал, что не одолею.
Сергей Удодов
Уровень 27, Санкт-Петербург
13 августа, 08:32
Только что, значит, все работало... проходил тесты как вдруг откуда ни возьмись :
Module '3.JavaMultithreading' production: java.lang.ClassCastException: class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ArrayType cannot be cast to class org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType (org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ArrayType and org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType are in unnamed module of loader java.net.URLClassLoader @8efb846)
Кто-нибудь сталкивался с этим зверем?
Вадим
Уровень 40, Минск, Belarus
11 августа, 13:00
Валидатор уничтожает нервные клетки и упорно отказывается адекватно говорить в чём проблема. "Все слова переданные в метод getLine должны быть включены в результирующую строку." по его мнению я выполнил, а "Вывод на экран должен соответствовать условию задачи." - нет. В итоге оказалось что действительно есть ошибка и в некоторых случаях из цепочки могут выпасть слова, но валидатор даёт ложную информацию и говорит что в результирующей строке все слова на месте. А что касается задачи - просто бегаю циклом по массиву и сравниваю первую и последнюю букву в главной строке и любом слове. Если совпадает, то либо добавляю спереди, либо сзади. Если нет, то через indexOf() проверяю нет ли подходящего места внутри строки и вставляю туда (до этого вот не сразу додумался). Ни про какие графы не читал, валидатор в итоге победил)
Gecko81 Босик
8 августа, 14:15
Потратил 16+ часов на решение, задачка сильно прокачала - побольше бы таких
Kotamadeo
Уровень 40
23 июля, 15:32
Интересная задачка, хоть и пришлось копать доп инфу про графы
yaaeck
Уровень 40
20 июля, 09:23
Брат, если ты тоже, как и я, кайфуешь на этой задаче 3 дня, то, запомни, дебаггер и вера в себя. Я в тебя верю❤️