Грайте в скраб за допомогою періодичної таблиці


13

Ви отримали набір плиток із символами з періодичної таблиці. Кожен символ з’являється один раз. Ви придумуєте слова, щоб скласти, але хочете дізнатися, чи можливо це чи ні.

Змагання

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

Ваша програма повинна приймати цей рядок і виводити триєдне значення, якщо це слово може складатися з символів з періодичної таблиці елементів, і значення фальси, якщо слово не може.

Щоб ускладнити цей виклик, ви можете не використовувати символ двічі. Отже, якщо ви використовуєте Азот, Nви можете не використовувати Nбільше того ж слова.

Правила

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

Випробування:

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

Це кодовий виклик для гольфу, найкоротший виграш коду.

ПЕРЕД ВАС ЗАКРИТИ ЯК ДУПЛІКАТИ: Хоча це може здатися подібним до цього виклику , я вважаю, що це інакше, оскільки це не "Створення списку всіх можливих слів із періодичної таблиці", це "Візьміть довільне введення та визначте, чи це можна зробити з періодичної таблиці '


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 для хибного.

Спробуйте в Інтернеті на невеликій підмножині елементів


3

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

spc~@l.

Зателефонуйте зі списком символів (усіма малими літерами) як Input, а словом як Output, напр 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

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

На мобільному пристрої не вдалося встановити фактичний тестовий набір, але спробуйте це .


1
Ви написали це по телефону !?
JamesENL

Це не гарантує, що елемент не використовується декілька разів. Приклад.
PurkkaKoodari

1

Pyth, 11 байт

s}RySQSM./z

Спробуйте в Інтернеті. Тестовий набір.

Написаний на моєму телефоні, але повинен працювати. Дуже повільно для великої кількості елементів або довгої струни.

Пояснення

  • Візьміть усі розділи ( ./) входу ( z).
  • Сортувати ( S) кожен розділ ( M).
  • Для кожного розділу ( R) дивіться, чи є він у ( }) списку всіх підмножин ( y) відсортованої ( S) періодичної таблиці, поданих як вхід ( Q).
  • Підсумовуйте ( s) отриманий список булів.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.