Stopień nienasycenia
Nie jest to szczególnie trudna łamigłówka - ale interesuje mnie twoje wiele sposobów jej rozwiązania.
Stopień nienasycenia to liczba podwójnych wiązań chemicznych między atomami i / lub liczba pierścieni w związku chemicznym.
Otrzymasz wzór cząsteczkowy związku chemicznego w postaci XaYbZc (gdzie a, b i c to liczba atomów X, Y lub Z w związku) - wzór może mieć dowolną długość i zawierać dowolny pierwiastek chemiczny w układzie okresowym (chociaż elementy inne niż C, H, N, F, Cl, Br, I mogą zostać zignorowane, ponieważ nie występują we wzorze). Związek będzie zawierał co najmniej jeden atom węgla. Musisz obliczyć i wyświetlić stopień nienasycenia.
Na przykład związek benzenu (na zdjęciu poniżej) ma DoU równą 4, ponieważ ma trzy wiązania podwójne (pokazane podwójną linią między atomami) i pojedynczy pierścień (kilka atomów połączonych w pętli):
Zgodnie z definicją LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Gdzie:
C
to liczba atomów węglaN
to liczba atomów azotuX
Jest to liczba atomów chlorowca (F
,Cl
,Br
,I
)H
to liczba atomów wodoru
Przypadki testowe:
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
Wyjaśnienie CH patrz tutaj
Zasadniczo musisz określić, czy w związku występuje którykolwiek z powyższych pierwiastków (C, H, N, F, Cl, Br, I), a jeśli tak, to ile ich jest. Następnie obliczyć stopień nienasycenia, korzystając z powyższego wzoru.
Tylko C, H, N, F, Cl, Br i I są poprawnymi danymi wejściowymi dla formuły DoU. Na potrzeby tej układanki wszelkie inne elementy można całkowicie zignorować (np. Jeśli związek miałby postać C6H6Mn, wynik nadal wynosiłby 4). Jeśli nie ma żadnego z powyższych związków, odpowiedź wynosiłaby zero.
Możesz założyć, że wszystkie wprowadzone związki są chemicznie możliwe, zawierają co najmniej jeden atom węgla i wiadomo, że istnieją. Jeśli dane wejściowe są niepoprawne, program może wyprowadzić wartość 0 lub -1 lub nie wygenerować żadnego wyniku.
Zasady
Obowiązują standardowe zasady i luki we / wy . Dane wejściowe muszą być ciągiem standardowym i można założyć, że dane wejściowe nie będą puste. To jest codegolf - więc wygrywa najkrótszy kod w bajtach.
C9H2O1 --> 0
. Czy nie powinno być 9? (2*9+2+0-0-2)/2
Na2O
i metyloidyna:CH
iCCl4He
. Oto niektóre narożne przypadki, które mogą złamać kilka rozwiązań. Nawiasem mówiąc, nie to, że ma to znaczenie dla kogokolwiek innego niż Mathematica (prawdopodobnie), ale czy możemy założyć, że związki (mogą) istnieć?