Gioca a scrabble con la tavola periodica


13

Hai una serie di tessere con i simboli della tavola periodica. Ogni simbolo appare una volta. Stai pensando a parole da fare ma vuoi sapere se è possibile o meno.

La sfida

Scrivi un programma nella tua lingua preferita che prenderà una stringa come parametro di input. Si può presumere che l'input non sia nullo, non abbia spazi ed è composto da caratteri ASCII.

Il tuo programma dovrebbe prendere quella stringa e produrre un valore di verità se quella parola può essere composta da simboli della tavola periodica degli elementi e un valore di falsa se la parola non può.

Per rendere questa sfida più difficile, non puoi usare un simbolo due volte. Quindi se usi l'azoto Nnon puoi Nriutilizzarlo nella stessa parola.

Regole

Non sono ammesse scappatoie standard. Puoi usare i simboli degli elementi 1-118 (da Idrogeno a Ununtizio). Puoi trovare un elenco di tutti gli elementi qui . È possibile leggere l'elenco di simboli da un file o inserire argomenti se lo si desidera.

Casi test:

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

Questa è una sfida del codice golf, vince il codice più corto.

PRIMA DI CHIUDERE COME DUPLICATO: Sebbene possa sembrare simile a questa sfida , ritengo che sia diverso perché non è "Genera un elenco di tutte le parole possibili dalla tavola periodica", ma è "Accetta input arbitrari e determina se può essere ricavato dalla tavola periodica '


2
C'è questo che è più strettamente correlato ma era esso stesso chiuso come duplicato della sfida che hai collegato. Penso che il fatto che tu possa usare un simbolo solo una volta sia la più grande differenziazione tra le sfide. In termini di golf, dubito che esista un modo migliore che forzare tutte le parole possibili e verificare se l'input è tra queste.
Martin Ender,

1
"Se lo desideri, puoi leggere l'elenco dei simboli da un file." - come lo contiamo? La dimensione del file viene aggiunta alla lunghezza del codice? O possiamo usarlo gratuitamente?
Qwertiy,

2
Possiamo prendere la lista degli elementi come argomento per il programma?
Emigna,

1
@Qwertiy, la dimensione del file è libera, ma i byte in cui leggerlo non lo sono.
JamesENL,

9
Boro, radio, iodio, azoto, fluoro, uranio, carbonio, potassio.
Neil,

Risposte:


3

05AB1E, 16 byte

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

spiegato

œ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

Avvertenza: estremamente lento. Consiglio di provare su un sottoinsieme di elementi molto più piccolo nell'interprete online.

Prende un elenco di elementi come primo argomento.
Richiede la parola per testare come secondo argomento.
Restituisce 1 per true e 0 per false.

Provalo online su un piccolo sottoinsieme di elementi


3

Brachylog , 7 byte

spc~@l.

Chiama con l'elenco dei simboli (tutti minuscoli) come Input e la parola come Output, ad es run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Attenzione: questo è estremamente inefficace quando tutti i simboli sono nella lista.

Spiegazione

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

4
@Downvoter ti interessa spiegare?
Fatalizza il

1

JavaScript (Firefox 48 o precedente), 103 byte

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}
`,`
`)))

1

Pyth - 13 byte

Controlla solo se una partizione di input in minuscolo ha tutte le parti nella tavola periodica.

sm.A}RQd./rzZ

Sui dispositivi mobili, quindi non è stato possibile impostare una suite di test reale, ma prova questo .


1
L'hai scritto su un telefono !?
JamesENL,

Ciò non garantisce che un elemento non venga utilizzato più volte. Esempio.
PurkkaKoodari,

1

Pyth, 11 byte

s}RySQSM./z

Provalo online. Suite di test.

Scritto sul mio telefono, ma dovrebbe funzionare. Molto lento per un gran numero di elementi o una lunga stringa.

Spiegazione

  • Prendi tutte le partizioni (./ ) dell'input ( z).
  • Ordina (S ) ogni partizione ( M).
  • Per ogni partizione ( R), vedere se è in ( }) l'elenco di tutti i sottoinsiemi ( y) dell'ordinato (S tabella periodica ) fornita come input ( Q).
  • Somma ( s) l'elenco risultante di booleani.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.