Spielen Sie Scrabble mit dem Periodensystem

13

Sie haben eine Reihe von Kacheln mit den Symbolen aus dem Periodensystem. Jedes Symbol erscheint einmal. Sie überlegen sich Wörter, aber Sie möchten wissen, ob es möglich ist oder nicht.

Die Herausforderung

Schreiben Sie ein Programm in Ihrer bevorzugten Sprache, das einen String als Eingabeparameter verwendet. Sie können davon ausgehen, dass die Eingabe nicht null ist, keine Leerzeichen enthält und aus ASCII-Zeichen besteht.

Ihr Programm sollte diese Zeichenfolge verwenden und einen Wahrheitswert ausgeben, wenn dieses Wort aus Symbolen aus dem Periodensystem der Elemente bestehen kann, und einen Falsey-Wert, wenn das Wort dies nicht kann.

Um diese Herausforderung zu erschweren, dürfen Sie ein Symbol nicht zweimal verwenden. Also, wenn Sie Stickstoff verwenden N, dürfen Sie nicht verwendenN einmal mit demselben Wort verwenden.

Regeln

Standardlücken sind nicht erlaubt. Sie können Symbole aus den Elementen 1-118 (Wasserstoff zu Ununoctium) verwenden. Eine Liste aller Elemente finden Sie hier . Sie können die Liste der Symbole aus einer Datei lesen oder Argumente eingeben, wenn Sie dies wünschen.

Testfälle:

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

Dies ist eine Code Golf Herausforderung, der kürzeste Code gewinnt.

BEVOR SIE ALS DUPLIKAT SCHLIESSEN: Auch wenn dies dieser Herausforderung ähnlich zu sein scheint , ist es meines Erachtens anders, weil es nicht "Generiere eine Liste aller Wörter, die aus dem Periodensystem möglich sind" ist, sondern "Nimm willkürliche Eingaben auf und bestimme, ob es kann aus dem Periodensystem gemacht werden '

JamesENL
quelle
2
Es gibt dies, das enger verwandt ist, aber selbst als Duplikat der von Ihnen verknüpften Herausforderung geschlossen wurde. Ich denke, dass die Tatsache, dass Sie ein Symbol nur einmal verwenden können, die größte Differenzierung zwischen den Herausforderungen darstellt. Ich bezweifle, dass es beim Golfen einen besseren Weg gibt, als alle möglichen Wörter zu erzwingen und zu überprüfen, ob die Eingabe unter ihnen ist.
Martin Ender
1
Msgstr "Sie können die Liste der Symbole aus einer Datei einlesen, wenn Sie dies wünschen." - Wie zählen wir das? Wird die Größe der Datei zur Codelänge hinzugefügt? Oder können wir es kostenlos nutzen?
Qwertiy
2
Können wir die Liste der Elemente als Argument für das Programm nehmen?
Emigna
1
@Qwertiy, die Größe der Datei ist frei, die einzulesenden Bytes jedoch nicht.
JamesENL
9
Bor, Radium, Jod, Stickstoff, Fluor, Uran, Kohlenstoff, Kalium.
Neil

Antworten:

3

05AB1E, 16 Bytes

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

Erklärt

œ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

Warnung: Sehr langsam. Ich empfehle, eine viel kleinere Teilmenge von Elementen im Online-Interpreter zu testen.

Nimmt die Liste der Elemente als erstes Argument.
Nimmt das zu testende Wort als zweites Argument.
Gibt 1 für wahr und 0 für falsch zurück.

Probieren Sie es online an einer kleinen Teilmenge von Elementen aus

Emigna
quelle
3

Brachylog , 7 Bytes

spc~@l.

Rufen Sie mit der Liste der Symbole (alle in Kleinbuchstaben) als Eingabe und dem Wort als Ausgabe auf, z run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Warnung: Dies ist äußerst ineffizient, wenn alle Symbole in der Liste enthalten sind.

Erläuterung

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
Tödlich
quelle
4
@ Downvoter darauf bedacht zu erklären?
Fatalize
1

JavaScript (Firefox 48 oder früher), 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}
`,`
`)))
Neil
quelle
1

Pyth - 13 Bytes

Überprüft nur, ob eine Partition der Eingabe in Kleinbuchstaben alle Teile des Periodensystems enthält.

sm.A}RQd./rzZ

Auf dem Handy konnte also keine aktuelle Testsuite eingerichtet werden, aber versuchen Sie dies .

Maltysen
quelle
1
Du hast das auf ein Telefon geschrieben !?
JamesENL
Dies stellt nicht sicher, dass ein Element nicht mehrmals verwendet wird. Beispiel.
PurkkaKoodari
1

Pyth, 11 Bytes

s}RySQSM./z

Probieren Sie es online aus. Testsuite.

Geschrieben auf meinem Handy, sollte aber funktionieren. Sehr langsam für eine große Anzahl von Elementen oder eine lange Zeichenfolge.

Erläuterung

  • Nimm alle Partitionen ( ./) der Eingabe (z ).
  • Sortieren ( S) Sie jede Partition ( M).
  • Überprüfen Sie für jede Partition ( R), ob sie in ( }) der Liste aller Teilmengen ( y) des Sals Eingabe ( Q) angegebenen sortierten ( ) Periodensystems enthalten ist .
  • Sum ( s) die resultierende Liste der Booleschen Werte.
PurkkaKoodari
quelle