Играть в скрэббл с периодической таблицей

13

У вас есть набор плиток с символами из периодической таблицы. Каждый символ появляется один раз. Вы придумываете слова, чтобы сделать, но вы хотите знать, возможно ли это или нет.

Соревнование

Напишите программу на вашем любимом языке, которая будет принимать строку в качестве входного параметра. Вы можете предположить, что ввод не нулевой, не имеет пробелов и состоит из символов ASCII.

Ваша программа должна взять эту строку и вывести истинное значение, если это слово может состоять из символов из периодической таблицы элементов, и значение Falsey, если слово не может.

Чтобы сделать этот вызов более сложным, вы не можете использовать символ дважды. Поэтому, если вы используете азот, Nвы не можете использовать его Nснова в одном и том же слове.

правила

Стандартные лазейки не допускаются. Вы можете использовать символы из элементов 1-118 (от водорода до унуноция). Вы можете найти список всех элементов здесь . Вы можете прочитать список символов из файла или ввести аргументы, если хотите.

Тестовые случаи:

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

Это соревнование по коду, самый короткий код выигрывает.

ПЕРЕД ТЕМ, ЧТОБЫ ВЫКРЫТЬ КАК ДУБЛИКАТ: Хотя это может показаться схожим с этим испытанием , я чувствую, что оно отличается от того, что это не «Генерация списка всех слов, которые возможны из периодической таблицы», это «Возьмите произвольный ввод и определите, это может быть сделано из периодической таблицы "

JamesENL
источник
2
Там в этом , который более тесно связаны , но сам был закрыт как дубликат вызова вы связаны между собой . Я думаю, что тот факт, что вы можете использовать символ только один раз, является самым большим отличием между вызовами. С точки зрения игры в гольф, я сомневаюсь, что есть лучший способ, чем грубое принуждение ко всем возможным словам и проверка, входит ли вход в них.
Мартин Эндер
1
«Вы можете прочитать список символов из файла, если хотите.» - как мы это посчитаем? Добавлен ли размер файла к длине кода? Или мы можем использовать это бесплатно?
Qwertiy
2
Можем ли мы взять список элементов в качестве аргумента программы?
Эминья
1
@Qwertiy, размер файла свободен, но нет байтов для чтения.
JamesENL
9
Бор, Радий, Йод, Азот, Фтор, Уран, Углерод, Калий.
Нил

Ответы:

3

05AB1E, 16 байтов

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

Разъяснения

œ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

Предупреждение: очень медленно. Я рекомендую тестировать на гораздо меньшем подмножестве элементов в онлайн-переводчике.

Принимает список элементов в качестве первого аргумента.
Принимает слово для проверки в качестве второго аргумента.
Возвращает 1 для истины и 0 для ложных.

Попробуйте онлайн на небольшом подмножестве элементов

Emigna
источник
3

Брахилог , 7 байт

spc~@l.

Вызов со списком символов (все строчные буквы) в качестве ввода и слова в качестве вывода, например run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe"). .

Предупреждение: это крайне неэффективно, когда все символы в списке.

объяснение

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
Fatalize
источник
4
@Downvoter хотите объяснить?
Роковая
1

JavaScript (Firefox 48 или более ранняя версия), 103 байта

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 байт

Просто проверяет, есть ли в любом разделе входных данных в нижнем регистре все части периодической таблицы.

sm.A}RQd./rzZ

На мобильном телефоне, поэтому не удалось настроить реальный набор тестов, но попробуйте это .

Maltysen
источник
1
Вы написали это на телефоне !?
JamesENL
Это не гарантирует, что элемент не используется несколько раз. Пример.
PurkkaKoodari
1

Pyth, 11 байт

s}RySQSM./z

Попробуйте онлайн. Тестирование.

Написано на моем телефоне, но должно работать. Очень медленно для большого количества элементов или длинной строки.

объяснение

  • Возьмите все разделы ( ./) ввода ( z).
  • Сортировать ( S) каждый раздел ( M).
  • Для каждого partition ( R) посмотрите, есть ли в ( }) список всех подмножеств y( S) периодической таблицы sorted ( ), заданной как input ( Q).
  • Sum ( s) результирующий список логических значений.
PurkkaKoodari
источник