Чейнджер слов - это игра, в которой вы пытаетесь превратить одно слово в другое с помощью односимвольных правок, причем каждый шаг - это свое слово. Для этой задачи изменения могут быть заменами, вставками или удалениями. Например, WINNER → LOSER может быть сделано с этим маршрутом (могут быть другие):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER
Иными словами, вы должны быть в состоянии найти одно слово из другого, проходя только через другие слова на расстоянии Левенштейна 1 каждый раз.
кодирование
Вам будет предоставлен список слов и два слова, и вы должны вывести действительный маршрут от одного слова к другому, если маршрут существует, или отдельное постоянное значение или согласованное поведение, если маршрут не существует.
- Вы можете предположить, что оба входных слова находятся в списке слов
- Список слов может быть взят через любой удобный плоский формат.
- Списки, наборы, попытки, строки, разделенные пробелами, и файлы, разделенные строками, являются действительными (например), но предварительно вычисленный граф смежности Левенштейна - нет.
- Выходной маршрут должен включать оба входных слова, но начало и конец не имеют значения.
- Если маршрут не найден, вы можете вывести определенную константу, ложное значение, пустой список, выбросить исключение, выйти с ненулевым кодом или выполнить любое другое поведение за конечное время.
- Маршрут не обязательно должен быть оптимальным, и нет требования о том, какой маршрут выбрать.
- Сложность вычислений не имеет значения, однако ваша программа должна быть гарантированно завершена за конечное время. (даже если это выйдет за пределы тепловой смерти вселенной)
- Вы можете предположить, что все слова полностью состоят из букв в одном и том же случае
Примеры тестовых случаев
- КПП → СОБАКА; [CAT, DOG, COG, COT, FROG, GROG, BOG]
- CAT, COT, COG, DOG
- ВАННА → ДУШ; [ВАННА, ДУШ, ХАТ, ШАП, БАТ, САТ, ПИЛА, СОУ, ШОУ, КАК]
- Маршрут не найден
- BREAK → FIX; [BREAK, FIX, BEAK, BREAD, READ, BAD, RED, BED, BAD, BID, FAD, FAX]
- ПЕРЕРЫВ, ХЛЕБ, БУС, ПЛОХО, ФАД, ФАКС, ИСПРАВИТЬ
- СТРОЙ → УНИЧТОЖЕНИЕ; [СТРОИТЬ, УНИЧТОЖИТЬ, СТРОИТЬ, ВИНОВАТЬ, ГИЛЬДИЯ, ЗОЛОТО, ГИЛЛ, БИЛЛ, УКЛ, ЗАПОЛНИТЬ, УНИЧТОЖИТЬ, СТРУКТУРУ, СТРОИТЕЛЬСТВО]
- Маршрут не найден
- КАРТА → СОВЕТ; [КАРТА, СОВЕТ, БАРД]
- КАРТА, БАРД, ДОСКА
- ДЕМОН → АНГЕЛ; [ДЕМОН, АНГЕЛ]
- Маршрут не найден
- ПОСЛЕДНО → ПРОШЛОЕ; [ПОСЛЕДНЕЕ, ПРОШЛОЕ, БЛАСТ, БЫСТРО, ЧЕРНЫЙ, ПРИЗРАК, ПОСТ, БАСТ
- ПОСЛЕДНО, ПРОШЛОЕ
- ВСТАВИТЬ → УДАЛИТЬ; Этот список слов
- INSERT, INVERT, INVENT, INBENT, UNBENT, UNBEND, UNBIND, UNKIND, UNKING, INKING, IRKING, DIRKING, DARING, ARLING, AILING, SIRING, SERING, SERINE, NERINE, NERITE, CERITE, CERATE, DERATE, DELATE, DELATE, DELATE УДАЛЯТЬ
code-golf
string
decision-problem
Beefster
источник
источник
Ответы:
05AB1E ,
232120 байтРаспечатывает список действительных маршрутов.
Сохранено 2 байта благодаря Кевину Круйссену .
Попробуйте онлайн!
источник
Dævyœ«}
на怜€`
. (Не уверен, почему обе карты по отдельности€
работают нормально, ноæεœ`}
, между прочим, это не так, но в любом случае это один и тот же счетчик байтов.)[]
является1
вместо0
(не удивительно, хотя) , или равный чек с пустым списком по- видимому , приводит к пустому списку вместо0
(этого я вижу , как ошибка ..) .. В противном случае вы могли бы совмещали фильтр и find_first, чтобы сохранить еще один байт:怜€`.Δü.LPy¬²Qsθ³QP
€
. Я думаю, что проверка на равенство приводит к пустому списку из-за векторизации. Может быть, должен быть особый случай для пустого списка, но, возможно, это было бы неожиданно в других случаях.JavaScript (V8) ,
177176 байтПринимает вход как
(target)(source, list)
. Печатает все возможные маршруты. Или ничего не печатает, если нет решения.Попробуйте онлайн!
комментарии
источник
Wolfram Language (Mathematica) , 59 байт
Попробуйте онлайн!
источник
Python 2 , 155 байт
Попробуйте онлайн!
Принимает два слова и набор слов в качестве входных данных; возвращает (неоптимальный) маршрут, если он существует в виде списка строк, в противном случае возвращает False.
Этот фрагмент:
это
True
если и только еслиa==w
илиa
имеет расстояние Левенштейна1
отw
.источник
Wolfram Language (Mathematica) , 124 байта
Попробуйте онлайн!
источник
Python 2 , 163 байта
Если маршрут найден, он выводится в stderr, и программа завершает работу с кодом выхода 1.
Если маршрута нет, выход не выводится, и программа завершается с кодом выхода 0.
Попробуйте онлайн!
источник
Питон 3 ,
217214212201 байт-11 байт спасибо подсказке от xnor
Попробуйте онлайн!
источник
Желе , 38 байт
Попробуйте онлайн!
Полная программа, принимающая три аргумента. Первое - это начальное слово, которое предоставляется как
[["START"]]
. Второй аргумент - последнее слово, поставляемое как"END"
. Третий аргумент - это список слов, представленный в кавычках, через запятую.Программа возвращает список списков, каждый из которых представляет действительный путь от начала до конца. Если действительного маршрута нет, ответом будет пустой список.
В ссылке TIO есть текст нижнего колонтитула, чтобы аккуратно отобразить результат с каждым словом, разделенным пробелами, и каждым списком слов, разделенных символом новой строки. Если распечатка в виде представления списка предпочтительна, это можно сделать как
ÇŒṘ
.В отличие от 05ABIE, здесь нет встроенного расстояния Левенштейна, поэтому эта программа сравнивает наложения с отсутствующим одиночным символом, что несколько похоже на решение @ ChasBrown , хотя и с поворотом Jelly.
объяснение
Вспомогательная ссылка: монадическая ссылка, которая принимает список слов и возвращает список возможных расширенных списков или пустой список, если дальнейшее расширение невозможно
Главная ссылка
источник
Swift 4.2 / Xcode 10.2.1 , 387 байт
Попробуйте онлайн!
источник