불포화도
이것은 특히 어려운 코드 퍼즐은 아니지만 여러 가지 방법으로 해결하는 데 관심이 있습니다.
불포화도는 원자 사이의 이중 화학 결합의 수 및 / 또는 화합물의 고리의 수입니다.
XaYbZc 형태의 화합물의 분자식이 제공됩니다 (여기서 a, b 및 c는 화합물의 X, Y 또는 Z의 원자 수임) 주기율표에서 (C, H, N, F, Cl, Br 이외의 원소는 공식에 포함되지 않기 때문에 무시 될 수 있음). 화합물은 하나 이상의 탄소 원자를 함유 할 것이다. 불포화도를 계산하고 표시해야합니다.
예를 들어, 화합물 벤젠 (아래 그림)은 3 개의 이중 결합 (원자 사이에 이중 선으로 표시됨)과 단일 고리 (루프에 연결된 많은 원자)를 가지므로 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
CH에 대한 설명 은 여기를 참조하십시오
본질적으로, 화합물에 상기 원소들 (C, H, N, F, Cl, Br, I) 중 어느 것이 있는지, 그리고 얼마나 많은지 식별해야합니다. 그런 다음 위 공식을 사용하여 불포화도를 계산하십시오.
C, H, N, F, Cl, Br 및 I 만 DoU 수식에 유효한 입력입니다. 이 퍼즐의 목적 상, 다른 원소는 완전히 무시 될 수 있습니다 (예 : 화합물이 C6H6Mn 인 경우 결과는 여전히 4 임). 위의 화합물이 없으면 답은 0입니다.
투입되는 모든 화합물은 화학적으로 가능하고 하나 이상의 탄소 원자를 함유하며 존재하는 것으로 알려져 있다고 가정 할 수 있습니다. 입력이 유효하지 않으면 프로그램은 0 또는 -1을 출력하거나 결과를 생성하지 않을 수 있습니다.
규칙
표준 IO 규칙 및 허점이 적용됩니다. 입력은 표준 문자열이어야하며 입력이 비어 있지 않다고 가정 할 수 있습니다. 이것은 codegolf이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
C9H2O1 --> 0
. 9가 아니어야합니까? (2*9+2+0-0-2)/2
Na2O
및 메틸 리딘 :CH
및CCl4He
. 이것들은 몇 가지 해결책을 깨뜨릴 수있는 코너 사례입니다. 그건 그렇고, Mathematica 이외의 다른 사람에게 (아마도) 중요하지는 않지만 화합물이 존재할 수 있다고 가정 할 수 있습니까?