Когда я был моложе, я играл в словесную игру под названием цепочка слов . Это было очень просто. Первый игрок выбирает слово; следующий игрок произносит другое слово, начинающееся с той же буквы, что и предыдущее слово. Это продолжается вечно, пока кто-нибудь не сдастся! Трюк в том, что вы не можете использовать одно и то же слово дважды (если все не забыли, что это слово использовалось даже!). Обычно мы играем с определенной темой, чтобы сделать ее сложнее. Но теперь я хочу, чтобы вы сделали программу, которая сделает это для меня.
Вызов
Напишите полную программу или функцию, чтобы найти все самые длинные цепочки слов, используя данный набор слов и начальное слово.
Это код-гольф , поэтому выигрывает самый короткий код!
вход
Есть два входа: список и начальное слово. Начальное слово не будет в списке. Все входные данные являются строчными ASCII, и список не будет содержать повторяющихся слов.
Выход
Все последовательности слов из списка такие, что:
Начальное слово - это первое слово в последовательности.
Каждое последующее слово начинается с той же буквы, что и последняя буква предыдущего слова.
Длина последовательности самая длинная .
Если имеется несколько самых длинных последовательностей, выведите их все.
Последовательность не обязательно должна содержать все слова списка. Иногда это невозможно (см. Контрольные примеры). Опять же, ни одно слово не может быть использовано дважды!
Testcases
In: [hello, turtle, eat, cat, people] artistic
Out: [artistic, cat, turtle, eat]
In: [lemonade, meatball, egg, grape] ham
Out: [ham, meatball, lemonade, egg, grape]
In: [cat, cute, ewok] attic
Out: [attic, cute, ewok]
In:[cat, cute, ewok, kilo, to, otter] attic
Out: [attic, cute, ewok, kilo, otter]
In:[cat, today, yoda, attic] ferret
Out: [ferret, today, yoda, attic, cat]
In: [cancel, loitering, gnocchi, improv, vivic, child, despair, rat, tragic, chimney, rex, xylophone] attic
Out: [[attic, child, despair, rat, tragic, cancel, loitering, gnocchi, improv, vivic, chimney], [attic, cancel, loitering, gnocchi, improv, vivic, child, despair, ra', tragic, chimney]]
In: [cat, today, yoda, artistic, cute, ewok, kilo, to, otter] attic
Out: [attic, cat, today, yoda, artistic, cute, ewok, kilo, otter]
Ответы:
Pyth,
2523 байтаТестирование
Решение грубой силы. Слишком медленно для некоторых крупных тестовых случаев.
Ввод в форме:
Вывод в виде:
Объяснение:
источник
JavaScript (ES6), 164 байта
объяснение
Рекурсивная функция, которая проверяет, как долго будет выходной список для всех возможных вариантов.
Возвращает массив массивов слов.
Тестовое задание
Параметр по умолчанию не используется в тесте, чтобы сделать его более совместимым с браузерами.
Показать фрагмент кода
источник
o[r.length]?
вместоo.length>r.length?
.o[r.length]
совет! Я не знаю, как я мог бы использовать,pop
хотя.Python, 104
Я думаю, что это должно работать сейчас ...
Попробуйте онлайн .
источник
Perl 5, 275 байт
Возможно, не так много в гольфе, как это возможно, но, в любом случае, это не выигрыш, верно?
Используйте это так:
Предупреждение! Использование этого скрипта в длинном списке требует много памяти! Он отлично работал для меня семь (шесть плюс один дополнительный), но не тринадцать (двенадцать плюс один).
Он удаляет последний ввод, генерирует массив arrayrefs, где arrayrefs - все перестановки, и добавляет начальное слово обратно в начале. Затем он помещает каждую такую перестановку в другой массивref, который является значением хэша с ключом, равным количеству массива, у которого есть желаемое свойство сцепления. Затем он находит максимум такого ключа и распечатывает все массивы.
источник
C 373 байта
Я полагаю, что, возможно, здесь гораздо больше возможностей для игры в гольф, поэтому я, вероятно, обновлю его.
Де-гольф
Идеальная ссылка - Если я не сделал это правильно, просто дайте мне знать: D
источник