Ступінь ненасиченості
Це не особливо складна загадка коду - але мені цікаво бачити ваші декілька способів її вирішення.
Ступінь ненасиченості - це кількість подвійних хімічних зв’язків між атомами та / або число кільця в хімічній сполуці.
Вам дадуть молекулярну формулу хімічної сполуки у формі XaYbZc (де a, b і c - кількість атомів X, Y або Z у сполуці) - формула може бути будь-якої довжини і містити будь-який хімічний елемент у періодичній таблиці (хоча елементи, відмінні від C, H, N, F, Cl, Br, мене можуть ігнорувати, оскільки вони не містять формули). З'єднання міститиме щонайменше один атом вуглецю. Ви повинні розрахувати та відобразити його ступінь ненасиченості.
Наприклад, сполука бензолу (на фотографії нижче) має DoU 4, оскільки має три подвійні зв’язки (показані подвійною лінією між атомами) та одне кільце (кількість атомів, з'єднаних у циклі):
Як визначено LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Де:
C
- кількість атомів вуглецюN
- кількість атомів азотуX
це число атомів галогену (F
,Cl
,Br
,I
)H
- кількість атомів водню
Тестові приклади:
C6H6 --> 4
C9H2O1 --> 0
C9H9N1O4 --> 6
U1Pt1 --> Not a valid input, no carbon
Na2O1 --> Not a valid input, no carbon
C1H1 --> 1.5, although in practice this would be one, but is a part of a compound rather than a compound in entirety.
N1H3 would return 0 - though in practice it isn't an organic compound (in other words it contains no carbon) so the formula wouldn't apply and it isn't a valid input
Пояснення СН див. Тут
По суті, ви повинні визначити, чи є якісь із зазначених вище елементів (C, H, N, F, Cl, Br, I), і якщо так, то їх кількість. Потім обчисліть ступінь ненасиченості, використовуючи наведену вище формулу.
Тільки C, H, N, F, Cl, Br, і I є дійсними входами для формули DoU. Для цілей цієї головоломки будь-які інші елементи можуть бути повністю проігноровані (наприклад, якби з'єднання було C6H6Mn, результат все одно був би 4). Якщо жодної із зазначених сполук немає, відповідь буде нульовою.
Можна припустити, що всі вхідні сполуки хімічно можливі, містять щонайменше один атом вуглецю і, як відомо, існують. Якщо введення недійсне, програма може вивести або 0, або -1, або не дасть результату.
Правила
Застосовуються стандартні правила вводу- виводу та лазівки . Введення має бути стандартним рядком, і ви можете припустити, що введення не буде порожнім. Це codegolf - так виграє найкоротший код у байтах.
C9H2O1 --> 0
. Чи не повинно бути 9? (2*9+2+0-0-2)/2
Na2O
і метилідин:CH
іCCl4He
. Це деякі кутові випадки, які можуть порушити декілька рішень. До речі, не те, що має значення для когось, крім Mathematica (напевно), але чи можна вважати, що сполуки (можуть) існувати?