Dados de letras são comuns em jogos de palavras. Pode ser divertido tentar soletrar palavras engraçadas com dados espantosos, por exemplo. Se você pegar um punhado de dados, é provável que não consiga soletrar certas palavras. Esse desafio é uma generalização dessa ideia.
Desafio
Dada uma lista de dados em que cada um tem pelo menos 1 face e uma palavra, sua tarefa é determinar se é possível soletrar essa palavra usando os dados fornecidos (nesse caso, ele deve retornar um resultado verdadeiro). Apenas uma letra de cada dado pode ser usada e um dado pode ser usado apenas uma vez. Você não precisa usar todos os dados dados.
Exemplos
Em um exemplo trivial, com os dados [[A], [C], [T]] e a string CAT, o resultado é verdadeiro. É claro que o BAT retornaria falso, pois não há dados com B neles
Se dado [[A, E, I, O, U], [A, B, C, T], [N, P, R]] como o conjunto de dados, você retornaria verdadeiro para ART, TON e CUR , mas falso para CAT, EAT e PAN, porque essas cadeias requerem reutilização de dados. Também deve ser bastante óbvio que o CRAB não pode ser escrito com esses dados, pois não há dados suficientes.
Se dado [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] como o conjunto de dados, você poderá soletrar CAT, ABELHA, FEIJÃO, CHÁ, BETERRABA e BAN, mas você não seria capaz de soletrar LONE, CAB, BAIL, TAIL, BAA ou TON
Pode haver múltiplos do mesmo dado. Se dado [[A, B, C], [A, B, C], [A, B, C]], você seria capaz de escrever CAB, BAA, AAA, etc ... mas obviamente nada sem A, B ou C nele.
Regras
- Nenhuma exploração de brechas padrão
- Isso é código-golfe , então o código mais curto vence.
- Você pode assumir que palavras e dados serão compostos apenas por letras maiúsculas.
- Você pode assumir que a palavra sempre terá pelo menos uma letra e que sempre haverá pelo menos 1 dado.
- Você pode assumir que um dado nunca terá mais do que uma da mesma letra.
- A entrada e a saída podem estar em qualquer formato conveniente.
fonte
Respostas:
Braquilog , 5 bytes
Experimente online!
Usamos a variável de entrada para os dados e a variável de saída para a palavra. É emitido
true.
quando é possível soletrar a palavra e defalse.
outra forma.Explicação
fonte
Haskell ,
4844 bytesEsta é uma função anônima. Vinculado a algum identificador,
f
ele pode ser usado comof "ART" ["AEIOU", "ABCT", "NPR"]
, o que produzTrue
. Experimente online!O equivalente não isento de pontos é
mapM id
sobre uma lista de listas usa aMonad
instância da lista e pode ser visto como uma escolha não determinística . Assim, por exemplo,mapM id ["AB","123"]
produz["A1","A2","A3","B1","B2","B3"]
.Para cada uma dessas combinações de dados, verificamos se a diferença
(\\)
de lista da palavra especificada e a combinação produz uma lista vazia.fonte
JavaScript (ES6), 68 bytes
fonte
EEE
.Python 2 , 82 bytes
Experimente online!
A cadeia de comparação
w[0]in x>0<f(...)
é equivalente a:w[0]in x
ex>0
e0<f(...)
.O segundo deles é sempre verdadeiro (
str
>int
) e o terceiro deles é equivalente af(...)
, de modo que a coisa toda é uma maneira mais curta de escreverw[0]in x and f(...)
fonte
JavaScript (ES6), 74 bytes
É introduzido na sintaxe de curry
(w)(a)
, onde w é a palavra que procuramos e a é uma lista de strings que descrevem os dados. Retorna 0 ou 1 .Experimente online!
Comentado
Transformamos cada subconjunto de permutação dos dados em um padrão de expressão regular e os testamos contra a palavra-alvo.
fonte
Casca , 5 bytes
Experimente online!
Retorna um valor diferente de zero se for possível soletrar a palavra; caso contrário, zero.
Explicação
fonte
Perl 5
-plF
,4846 bytes@DomHastings salvou 2 bytes
Experimente online!
Entrada:
Saída:
0
para uma palavra que não é validada. Qualquer número inteiro positivo para uma palavra que é validadaQuão?
Esta explicação analisa o código na ordem de execução, efetivamente da direita para a esquerda para esse one-liner.
fonte
JavaScript (Node.js) , 98 bytes
Experimente online!
Supondo que haja dados suficientes
JavaScript (Node.js) , 100 bytes
Experimente online!
JavaScript (Node.js) , 99 bytes
Experimente online!
fonte
Geléia ,
109 bytes-1 graças a Erik the Outgolfer (use em
w
vez deẇ@
>. <)Um link diádico que aceita uma lista de listas de caracteres à esquerda (os dados) e uma lista de caracteres à direita (a palavra) que retorna 1, se possível, e 0, se não.
Experimente online! Ou veja a suíte de testes .
Quão?
Algoritmo mais rápido (também 9 bytes):
Um link diádico com o mesmo formato de entrada que retorna inteiro positivo (verdade) quando possível e 0 (falsey) caso contrário.
fonte
R ,
192 185 135 117 111109 bytesExperimente online!
-2 caracteres graças a Giuseppe.
fonte
F=
Pitão , 21 bytes
Suíte de teste
Explicação:fonte