Учитывая название катиона и аниона, выведите «S» (растворимый) или «I» (нерастворимый). Таблица, которую мы будем использовать, взята из Википедии: https://en.wikipedia.org/wiki/Solubility_chart . Он копируется в конце вопроса для дальнейшего использования.
Вход : катион, за которым следует анион, разделенный пробелом. Катион будет одним из следующих:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
и анион будет одним из следующих:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
У каждой будет первая буква с заглавной буквы.
Пример ввода: Sodium Chloride
Вывод : истинное значение, или S
, если оно разрешимо, ложное или I
нет. Если на странице википедии есть что-то еще (например, слегка растворимое или реагирующее с водой) или если ввод не в форме «катион-анион», ваша программа может делать что-либо (неопределенное поведение), поэтому она может вывести 'S', ' Я или что-то еще.
Стол:
?,S,S,S,?,S,S,S,?,S,S,?,I,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,?,S,S,?,S,S,S
S,S,S,?,?,?,?,?,?,?,S,?,?,S,?
?,S,S,S,I,S,I,?,?,?,S,I,I,S,I
I,S,S,S,I,S,?,S,?,?,S,?,I,?,I
?,S,S,S,I,S,S,?,?,?,S,?,?,I,?
?,S,S,S,I,S,S,S,?,?,S,?,?,I,?
?,S,S,S,I,S,I,I,?,?,S,I,I,S,I
S,S,S,S,I,S,I,?,?,?,S,I,I,S,I
?,S,S,?,I,S,I,?,?,I,S,I,I,S,I
S,S,S,?,?,S,I,?,?,?,S,I,I,S,I
?,S,S,?,?,S,I,?,?,?,S,I,I,?,I
?,?,?,I,I,S,I,?,?,?,S,I,I,I,?
S,I,I,I,I,S,?,I,I,?,S,?,I,?,I
Строки представляют собой катионы в указанном выше порядке, а столбцы представляют собой анионы. Например, поскольку йодид магния растворим, а магний был 6-м катионом, а йодид - 4-м анионом, 6-й ряд и 4-й столбец имеют символ «S». ?
Указывает на неопределенное поведение.
источник
?
s дает большую свободу в том, какие алгоритмы можно использовать.kolmogorov-complexity
тэг, задача не запрашивает вывод таблицы, но правильное значение для данной пары (катион, анион).truthy
/'S'
илиfalsy
/'I'
?Ответы:
JavaScript (Node.js) , 143 байта
Возвращает 1 для растворимых, 0 для нерастворимых.
Попробуйте онлайн!
Как?
Преобразование входной строки в индекс поиска
Сначала мы строим ключ, извлекая 2-7-й символы аниона и добавляя два первых символа катиона:
Примеры:
Мы превращаем это в индекс поиска, анализируя его в base-35 и применяя модуль 1325, за которым следует модуль 508 (грубые значения):
Сжатие таблицы поиска
Поскольку пар значительно более разрешимых, чем нерастворимых , мы заполняем все неиспользуемые записи в поиске разрешимыми .
Кодируя растворимый с 1 и нерастворимый с 0 , наша таблица поиска по существу состоит из длинных строк из 1 , за которыми следует 0 :
Мы сжимаем его, сохраняя длины строк, равные 1 , как символы ASCII в диапазоне [32-126] .
источник
Рубин
-n
,969275706965 байтПопробуйте онлайн!
Я не очень хорош в создании хешей и таблиц поиска, поэтому вместо этого я решил использовать все эти символы под вопросительным знаком, чтобы упростить логическую структуру таблицы, а затем применить некоторую чистую магию Regex.
Обновление : изменено назначение некоторых вопросительных знаков и еще более упрощена логика сопоставления.
Обновление 2 : всего через 2 месяца я придумал еще одну модернизацию таблицы, чтобы сэкономить еще несколько байтов.
Таблица, которую мы собираемся создать, выглядит следующим образом:
Теперь следующие соединения можно считать растворимыми:
ra
Нит ра тэ, Хло ра тэ[SPm]o
Так Радиевом, Po калии, Am мо nium^[^C]*F
F фторид, но не C alcium или C opperh.*D
Лит ч иум D ichromateИз оставшихся соединений следующие нерастворимы:
Le
Le ad[MAIZ]i.*y
М agnesium, luminium, я рон (и другие катионы с указанным зарядом), Z , включая дополнительные соединения с блоком анионов , содержащих (Н у droxide-Thioc у anate)y
[OPDFbv]
О Xide, Р hosphate, D ichromate, F luoride, Автомобильные б Onate, Sil v эр[tr]i.*S
Строн ти мкм и Ва ри ит S ulfatesВсе остальное разрешимо.
источник
Python 2 ,
166161131 байтПопробуйте онлайн!
источник
Python 2 ,
180177151149147 байтПопробуйте онлайн!
источник
17*(b%91%61%17)%272
может бытьb%91%61%17*17%272
?Паскаль (FPC) ,
387358353348341319297 байтПопробуйте онлайн!
Объяснение:
источник
Желе ,
67 61 60 50 4744 байтаМонадическая ссылка, возвращающая список, для которого пустой
I
и непустойS
(в Jelly пустые списки ложные, а непустые правдивые).Попробуйте онлайн! (нижний колонтитул
”S”IÇ?
естьif LastLink(x) is Truthy then "S" else "I"
)Или посмотрите все случаи, отформатированные как сетка, соответствующие порядку сетки в OP.
Как?
После создания наборов входных данных, которые должны быть
S
и,I
и оценки этих входных данных как базовой десятки (Python:)dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
и использования нескольких циклов модулирующих значений и проверки набора хэш, использованный здесь, был найден.Нерастворимые ключевые целые числа создаются в коде путем вычисления целого числа, закодированного в 250, преобразования его в основание
25 ... 16* ... 10 и суммирования результата ...* базовые сокращения были достигнуты путем добавления некоторых избыточных ключей
источник