Jogue scrabble com a tabela periódica

13

Você tem um conjunto de peças com os símbolos da tabela periódica. Cada símbolo aparece uma vez. Você está pensando em palavras para criar, mas quer saber se é possível ou não.

O desafio

Escreva um programa em seu idioma favorito que use uma string como parâmetro de entrada. Você pode assumir que a entrada não é nula, não possui espaços e consiste em caracteres ASCII.

Seu programa deve pegar essa sequência e gerar um valor de verdade, se essa palavra puder ser composta de símbolos da tabela periódica de elementos, e um valor de falsey, se a palavra não puder.

Para tornar esse desafio mais difícil, você não pode usar um símbolo duas vezes. Portanto, se você usar nitrogênio, Nnão poderá usá-lo Nnovamente na mesma palavra.

Regras

As brechas padrão não são permitidas. Você pode usar símbolos dos elementos 1-118 (Hidrogênio para Ununoctium). Você pode encontrar uma lista de todos os elementos aqui . Você pode ler a lista de símbolos de um arquivo ou inserir argumentos, se desejar.

Casos de teste:

Laos - true (LaOs)
Amputation - true (AmPuTaTiON)
Heinous - true (HeINoUS)
Hypothalamus - true (HYPoThAlAmUS)
Singapore - true (SiNGaPoRe)
Brainfuck - true (BRaInFUCK)
Candycane - false

Este é um desafio de código de golfe, o código mais curto vence.

ANTES DE FECHAR COMO DUPLICADO: Embora isso possa parecer semelhante a esse desafio , acho que é diferente porque não é 'Gere uma lista de todas as palavras possíveis da tabela periódica', é 'Pegue entrada arbitrária e determine se pode ser feito a partir da tabela periódica '

JamesENL
fonte
2
Existe isso que está mais intimamente relacionado, mas foi fechado como uma duplicata do desafio que você vinculou. Eu acho que o fato de que você só pode usar um símbolo uma vez é a maior diferenciação entre os desafios. Em termos de golfe, duvido que exista uma maneira melhor do que o bruto forçar todas as palavras possíveis e verificar se a entrada está entre elas.
Martin Ender
1
"Você pode ler a lista de símbolos de um arquivo, se desejar." - como contamos isso? O tamanho do arquivo foi adicionado ao comprimento do código? Ou podemos usá-lo gratuitamente?
Qwertiy
2
Podemos levar a lista de elementos como argumento para o programa?
Emigna
1
@ Qwertiy, o tamanho do arquivo é livre, mas os bytes para lê-lo não são.
JamesENL
9
Boro, rádio, iodo, nitrogênio, flúor, urânio, carbono, potássio.
Neil

Respostas:

3

05AB1E, 16 bytes

œvyŒ€J})˜Ùvy²Q}O

Explicado

œv                # for each permutation of the list of elements
  yŒ              # get all sublist of elements
    €J            # join as strings to form the words possible to spell
      })˜Ù        # convert to list of unique spellable strings
          vy²Q}   # compare each word with input word
               O  # sum giving 1 if the word is found, else 0

Aviso: extremamente lento. Eu recomendo testar um subconjunto muito menor de elementos no intérprete online.

Leva a lista de elementos como primeiro argumento.
Leva a palavra para testar como segundo argumento.
Retorna 1 para verdadeiro e 0 para falso.

Experimente on-line em um pequeno subconjunto de elementos

Emigna
fonte
3

Braquilog , 7 bytes

spc~@l.

Ligue com a lista de símbolos (todos em minúsculas) como Entrada e a palavra como Saída, por exemplo run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Aviso: isso é extremamente ineficiente quando todos os símbolos estão na lista.

Explicação

spc        Create a string from a permutation of a subset of the Input
   ~@l.    This string can unify with the lowercase version of the Output
Fatalizar
fonte
4
@Downvoter cuidados para explicar?
Fatalize
1

JavaScript (Firefox 48 ou anterior), 103 bytes

f=(w,e=`
H
He
... (list of elements not included in the byte count) ...
Uus
Uuo
`)=>!w||e.match(/\w+/g).some(s=>!w.search(s,`i`)&&f(w.slice(s.length),e.replace(`
${s}
`,`
`)))
Neil
fonte
1

Pitão - 13 bytes

Apenas verifica se alguma partição de entrada em minúsculas possui todas as partes na tabela periódica.

sm.A}RQd./rzZ

No celular, não foi possível configurar um conjunto de testes real, mas tente isso .

Maltysen
fonte
1
Você escreveu isso em um telefone !?
JamesENL
Isso não garante que um elemento não seja usado várias vezes. Exemplo.
PurkkaKoodari
1

Pitão, 11 bytes

s}RySQSM./z

Experimente online. Suíte de teste.

Escrito no meu telefone, mas deve funcionar. Muito lento para um grande número de elementos ou uma cadeia longa.

Explicação

  • Pegue todas as partições ( ./) da entrada (z ).
  • Sort ( S) cada partição (M ).
  • Para cada partição ( R), veja se está em ( }) a lista de todos os subconjuntos ( y) da Stabela periódica classificada ( ) fornecida como entrada (Q ).
  • Sum ( s) a lista resultante de booleanos.
PurkkaKoodari
fonte