Los dados de letras son comunes en los juegos de palabras. Puede ser divertido intentar deletrear palabras divertidas con dados de boggle, por ejemplo. Si agarras un puñado de dados, es probable que no puedas deletrear ciertas palabras. Este desafío es una generalización de esa idea.
Desafío
Dada una lista de dados que tienen al menos 1 cara y una palabra, su tarea es determinar si es posible deletrear esa palabra usando los dados dados (en cuyo caso, debería devolver un resultado verdadero). Solo se puede usar una letra de cada dado y un dado solo se puede usar una vez. No necesitas usar todos los dados dados.
Ejemplos
En un ejemplo trivial, con los dados [[A], [C], [T]] y la cadena CAT, el resultado es verdadero. BAT, por supuesto, devolvería falso ya que no hay dados con B en ellos
Si se le da [[A, E, I, O, U], [A, B, C, T], [N, P, R]] como el conjunto de dados, volvería verdadero para ART, TON y CUR , pero falso para CAT, EAT y PAN porque esas cadenas requieren reutilizar dados. También debería ser bastante obvio que CRAB no se puede deletrear con estos dados ya que no hay suficientes dados.
Si se le da [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] como el conjunto de dados, usted podría deletrea CAT, BEE, BEAN, TEA, BEET y BAN, pero no podrás deletrear LONE, CAB, BAIL, TAIL, BAA o TON
Puede haber múltiplos del mismo dado. Si se le da [[A, B, C], [A, B, C], [A, B, C]], podría deletrear CAB, BAA, AAA, etc. pero obviamente nada sin A, B o C en ella.
Reglas
- No explotar las lagunas estándar
- Este es el código de golf , por lo que gana el código más corto.
- Puede suponer que tanto las palabras como los dados solo estarán formados por mayúsculas.
- Puede suponer que la palabra siempre tendrá al menos 1 letra y que siempre habrá al menos 1 dado.
- Puede suponer que un dado nunca tendrá más de una letra.
- La entrada y salida pueden estar en cualquier formato conveniente.
fuente
Respuestas:
Brachylog , 5 bytes
Pruébalo en línea!
Usamos la variable de entrada para los dados y la variable de salida para la palabra. Sale
true.
cuando es posible deletrear la palabra y defalse.
otra manera.Explicación
fuente
Haskell ,
4844 bytesEsta es una función anónima. Vinculado a algún identificador
f
se puede utilizar comof "ART" ["AEIOU", "ABCT", "NPR"]
, lo que produceTrue
. Pruébalo en línea!El equivalente no libre de puntos es
mapM id
sobre una lista de listas usa laMonad
instancia de lista y puede verse como una opción no determinista . Así, por ejemplo,mapM id ["AB","123"]
rendimientos["A1","A2","A3","B1","B2","B3"]
.Para cada una de esas combinaciones de dados, verificamos si la diferencia
(\\)
de la lista de la palabra dada y la combinación produce una lista vacía.fuente
JavaScript (ES6), 68 bytes
fuente
EEE
.Python 2 , 82 bytes
Pruébalo en línea!
La cadena de comparación
w[0]in x>0<f(...)
es equivalente a:w[0]in x
yx>0
y0<f(...)
.El segundo de esos siempre es verdadero (
str
>int
) y el tercero de esos es equivalente af(...)
, por lo que todo es una forma más corta de escribirw[0]in x and f(...)
fuente
JavaScript (ES6), 74 bytes
Toma información en la sintaxis de curry
(w)(a)
, donde w es la palabra que estamos buscando y a es una lista de cadenas que describen los dados. Devuelve 0 o 1 .Pruébalo en línea!
Comentado
Convertimos cada subconjunto de permutación de los dados en un patrón de expresión regular y los probamos contra la palabra objetivo.
fuente
Casco , 5 bytes
Pruébalo en línea!
Devuelve un valor distinto de cero si es posible deletrear la palabra, cero en caso contrario.
Explicación
fuente
Perl 5
-plF
,4846 bytes@DomHastings guardó 2 bytes
Pruébalo en línea!
Entrada:
Salida:
0
para una palabra que no está validada. Cualquier entero positivo para una palabra validada¿Cómo?
Esta explicación analiza el código en el orden de ejecución, efectivamente de derecha a izquierda para esta línea.
fuente
JavaScript (Node.js) , 98 bytes
Pruébalo en línea!
Asumiendo que hay suficientes dados
JavaScript (Node.js) , 100 bytes
Pruébalo en línea!
JavaScript (Node.js) , 99 bytes
Pruébalo en línea!
fuente
Jalea ,
109 bytes-1 gracias a Erik the Outgolfer (use en
w
lugar deẇ@
>. <)Un enlace diádico que acepta una lista de listas de caracteres a la izquierda (los dados) y una lista de caracteres a la derecha (la palabra) que devuelve 1 si es posible y 0 si no.
Pruébalo en línea! O ver el pruebas .
¿Cómo?
Algoritmo más rápido (también 9 bytes):
Un enlace diádico con el mismo formato de entrada que devuelve un entero positivo (verdadero) cuando sea posible y 0 (falsey) de lo contrario.
fuente
R ,
192185135117111109bytesPruébalo en línea!
-2 caracteres gracias a Giuseppe.
fuente
F=
Pyth , 21 bytes
Banco de pruebas
Explicación:fuente