Graj w scrabble przy układzie okresowym

13

Masz zestaw płytek z symbolami z układu okresowego pierwiastków. Każdy symbol pojawia się raz. Zastanawiasz się nad słowami, ale chcesz wiedzieć, czy to możliwe, czy nie.

Wyzwanie

Napisz program w swoim ulubionym języku, który pobierze ciąg znaków jako parametr wejściowy. Możesz założyć, że dane wejściowe nie są puste, nie zawierają spacji i składają się ze znaków ASCII.

Twój program powinien pobrać ten ciąg i wygenerować prawdziwą wartość, jeśli słowo to może składać się z symboli z okresowej tablicy elementów, oraz wartość falsey, jeśli słowo nie może.

Aby utrudnić to wyzwanie, nie możesz użyć symbolu dwa razy. Więc jeśli używasz azotu N, nie możesz używać go Nponownie w tym samym słowie.

Zasady

Standardowe luki są niedozwolone. Możesz używać symboli z pierwiastków 1-118 (Wodór do Ununoctium). Możesz znaleźć listę wszystkich elementów tutaj . Możesz odczytać listę symboli z pliku lub argumenty wejściowe, jeśli chcesz.

Przypadki testowe:

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

Jest to wyzwanie dla golfa kodowego, wygrywa najkrótszy kod.

PRZED ZAMKNIĘCIEM JAKO DUPLIKAT: Chociaż może się to wydawać podobne do tego wyzwania , wydaje mi się, że jest inaczej, ponieważ nie jest to „Wygeneruj listę wszystkich słów, które są możliwe z układu okresowego”, to „Weź dowolne dane wejściowe i ustal, czy można to zrobić z układu okresowego ”

JamesENL
źródło
2
Jest to coś, co jest bliżej powiązane, ale zostało zamknięte jako duplikat połączonego wyzwania. Myślę, że fakt, że możesz użyć symbolu tylko raz, jest największym rozróżnieniem między wyzwaniami. Jeśli chodzi o golfa, wątpię, by istniał lepszy sposób niż brutalne zmuszanie wszystkich możliwych słów i sprawdzanie, czy dane wejściowe są wśród nich.
Martin Ender
1
„Jeśli chcesz, możesz odczytać listę symboli z pliku.” - jak to policzymy? Czy rozmiar pliku jest dodawany do długości kodu? Czy możemy go użyć za darmo?
Qwertiy
2
Czy możemy wziąć listę elementów jako argument programu?
Emigna
1
@Qwertiy, rozmiar pliku jest wolny, ale bajty do odczytu nie są.
JamesENL
9
Bor, rad, jod, azot, fluor, uran, węgiel, potas.
Neil

Odpowiedzi:

3

05AB1E, 16 bajtów

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

Wyjaśniono

œ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

Ostrzeżenie: bardzo wolno. Polecam testowanie na znacznie mniejszym podzbiorze elementów w tłumaczu online.

Pobiera listę elementów jako pierwszy argument.
Testuje słowo jako drugi argument.
Zwraca 1 dla wartości true i 0 dla wartości false.

Wypróbuj online na małym podzbiorze elementów

Emigna
źródło
3

Brachylog , 7 bajtów

spc~@l.

Wywołaj z listą symboli (wszystkie małe litery) jako Wejście, a słowem jako Wyjście, np run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Ostrzeżenie: jest to wyjątkowo nieefektywne, gdy wszystkie symbole znajdują się na liście.

Wyjaśnienie

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
Fatalizować
źródło
4
@Downvoter chce wyjaśnić?
Fatalize
1

JavaScript (Firefox 48 lub wcześniejszy), 103 bajty

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
źródło
1

Pyth - 13 bajtów

Sprawdza tylko, czy jakakolwiek partycja małych liter ma wszystkie części układu okresowego.

sm.A}RQd./rzZ

Na urządzeniach mobilnych nie można skonfigurować rzeczywistego pakietu testowego, ale spróbuj tego .

Maltysen
źródło
1
Napisałeś to na telefonie !?
JamesENL
Nie zapewnia to, że element nie zostanie użyty wiele razy. Przykład.
PurkkaKoodari
1

Pyth, 11 bajtów

s}RySQSM./z

Wypróbuj online. Zestaw testowy.

Napisane na moim telefonie, ale powinny działać. Bardzo wolny dla dużej liczby elementów lub długiego sznurka.

Wyjaśnienie

  • Weź wszystkie partycje ( ./) z input ( z).
  • Sortuj ( S) każdą partycję ( M).
  • Dla każdej partycji ( R) sprawdź, czy znajduje się ona w ( }) liście wszystkich podzbiorów ( y) sortowanej ( S) tabeli okresowej podanej jako input ( Q).
  • Sum ( s) wynikowa lista wartości logicznych.
PurkkaKoodari
źródło