Буквенные кубики распространены в играх в слова. Например, может быть забавно пытаться произносить смешные слова с ошеломляющими кубиками. Если вы возьмете несколько кубиков, скорее всего, вы не сможете произнести определенные слова по буквам. Этот вызов является обобщением этой идеи.
Вызов
Учитывая список игральных костей, у каждого из которых есть по крайней мере 1 лицо и слово, ваша задача - определить, возможно ли написание этого слова с использованием данного кубика (в этом случае он должен вернуть правдивый результат). Можно использовать только одну букву из каждого кубика, а кубик можно использовать только один раз. Вам не нужно использовать все данные кости.
Примеры
В тривиальном примере с кубиками [[A], [C], [T]] и строкой CAT результат равен true. BAT, конечно, вернет false, поскольку на них нет кубиков с буквой B
Если дать [[A, E, I, O, U], [A, B, C, T], [N, P, R]] в качестве набора игральных костей, вы вернете true для ART, TON и CUR , но false для CAT, EAT и PAN, потому что эти строки требуют многократного использования игральных костей. Также должно быть достаточно очевидно, что CRAB нельзя записать с помощью этих кубиков, так как их недостаточно.
Если дать [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] в качестве набора игральных костей, вы сможете заклинание CAT, BEE, BEAN, TEA, BEET и BAN, но вы не сможете произнести LONE, CAB, BAIL, TAIL, BAA или TON
Там могут быть кратные одного и того же кубика. Если дать [[A, B, C], [A, B, C], [A, B, C]], вы сможете написать CAB, BAA, AAA и т. Д. ... но, очевидно, ничего без A, B или C в нем.
правила
- Не использовать стандартные лазейки
- Это код-гольф , поэтому выигрывает самый короткий код.
- Вы можете предположить, что и слова, и кости будут состоять только из заглавных букв.
- Вы можете предположить, что слово всегда будет длиной не менее 1 буквы и что всегда будет хотя бы 1 кубик.
- Вы можете предположить, что у кубика никогда не будет больше, чем одно и то же письмо.
- Ввод и вывод могут быть в любом удобном формате.
источник
Ответы:
Брахилог , 5 байт
Попробуйте онлайн!
Мы используем входную переменную для игры в кости и выходную переменную для слова. Это выводит,
true.
когда возможно написание слова иfalse.
иначе.объяснение
источник
Хаскелл ,
4844 байтаЭто анонимная функция. Привязанный к некоторому идентификатору,
f
он может быть использован какf "ART" ["AEIOU", "ABCT", "NPR"]
, что даетTrue
. Попробуйте онлайн!Неточечный эквивалент
mapM id
над списком списков используетMonad
экземпляр списка и может рассматриваться как недетерминированный выбор . Таким образом, например,mapM id ["AB","123"]
урожайность["A1","A2","A3","B1","B2","B3"]
.Для каждой из этих комбинаций игральных костей мы проверяем,
(\\)
дает ли разница в списке данного слова и комбинации пустой список.источник
JavaScript (ES6), 68 байт
источник
EEE
.Python 2 , 82 байта
Попробуйте онлайн!
Цепочка сравнения
w[0]in x>0<f(...)
эквивалентна:w[0]in x
иx>0
и0<f(...)
.Второе из них всегда верно (
str
>int
), а третье эквивалентноf(...)
, так что все это более короткий способ записиw[0]in x and f(...)
источник
JavaScript (ES6), 74 байта
Принимает ввод в синтаксисе карри
(w)(a)
, где w - это слово, которое мы ищем, а a - список строк, описывающих кости. Возвращает 0 или 1 .Попробуйте онлайн!
комментарии
Мы превращаем каждую подмножество перестановок кубиков в шаблон регулярного выражения и проверяем их на соответствие целевому слову.
источник
Шелуха , 5 байт
Попробуйте онлайн!
Возвращает ненулевое значение, если можно записать слово, иначе ноль.
объяснение
источник
Perl 5
-plF
,4846 байт@DomHastings сохранил 2 байта
Попробуйте онлайн!
Входные данные:
Выход:
0
за слово, которое не подтверждено. Любое положительное целое число для слова, которое провереноКак?
Это объяснение рассматривает код в порядке выполнения, фактически справа налево для этой строки.
источник
JavaScript (Node.js) , 98 байт
Попробуйте онлайн!
Предполагая, что есть достаточно кости
JavaScript (Node.js) , 100 байт
Попробуйте онлайн!
JavaScript (Node.js) , 99 байт
Попробуйте онлайн!
источник
Желе ,
109 байт-1 спасибо Эрику-аутголферу (используйте
w
вместоẇ@
>. <)Диадическая ссылка, принимающая список списков символов слева (кубик) и список символов справа (слово), который возвращает 1, если возможно, и 0, если нет.
Попробуйте онлайн! Или посмотрите набор тестов .
Как?
Более быстрый алгоритм (также 9 байт):
Двоичная ссылка с тем же форматом ввода, которая возвращает положительное целое число (истина), когда это возможно, и 0 (ложь) в противном случае.
источник
R ,
192 185 135 117 111109 байтПопробуйте онлайн!
-2 символа благодаря Джузеппе.
источник
F=
Pyth , 21 байт
Тестирование
Объяснение:источник