Mức độ không bão hòa
Đây không phải là một câu đố mã đặc biệt khó khăn - nhưng tôi rất muốn thấy nhiều cách giải quyết của bạn.
Mức độ không bão hòa là số lượng liên kết hóa học kép giữa các nguyên tử và / hoặc số vòng trong một hợp chất hóa học.
Bạn sẽ được cung cấp công thức phân tử của một hợp chất hóa học ở dạng XaYbZc (trong đó a, b và c là số nguyên tử của X, Y hoặc Z trong hợp chất) - công thức có thể có độ dài bất kỳ và chứa bất kỳ nguyên tố hóa học nào trong bảng tuần hoàn (mặc dù các yếu tố khác ngoài C, H, N, F, Cl, Br, tôi có thể bị bỏ qua vì chúng không có trong công thức). Hợp chất sẽ chứa ít nhất một nguyên tử carbon. Bạn phải tính toán và hiển thị Mức độ không bão hòa của nó.
Ví dụ, hợp chất benzen (hình dưới) có DoU là 4 vì nó có ba liên kết đôi (được hiển thị bằng một đường đôi giữa các nguyên tử) và một vòng đơn (một số nguyên tử được kết nối trong một vòng lặp):
Theo định nghĩa của LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Ở đâu:
C
là số nguyên tử carbonN
là số nguyên tử nitơX
là số nguyên tử halogen (F
,Cl
,Br
,I
)H
là số nguyên tử hydro
Các trường hợp thử nghiệm:
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 giải thích về CH xem tại đây
Về bản chất, bạn phải xác định xem có bất kỳ yếu tố nào ở trên (C, H, N, F, Cl, Br, I) trong hợp chất không, và nếu có thì có bao nhiêu. Sau đó, tính toán Mức độ không bão hòa bằng công thức trên.
Chỉ C, H, N, F, Cl, Br và I là các đầu vào hợp lệ cho công thức DoU. Đối với mục đích của câu đố này, bất kỳ yếu tố nào khác có thể bị bỏ qua hoàn toàn (ví dụ: nếu hợp chất là C6H6Mn thì kết quả vẫn là 4). Nếu không có hợp chất nào ở trên, câu trả lời sẽ bằng không.
Bạn có thể cho rằng tất cả các hợp chất đầu vào đều có thể hóa học, chứa ít nhất một nguyên tử carbon và được biết là tồn tại. Nếu đầu vào không hợp lệ, chương trình có thể xuất 0 hoặc -1 hoặc không tạo ra kết quả.
Quy tắc
Quy tắc IO tiêu chuẩn và sơ hở áp dụng. Đầu vào phải là một chuỗi tiêu chuẩn và bạn có thể cho rằng đầu vào sẽ không trống. Đây là codegolf - vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
C9H2O1 --> 0
. Không phải là 9 sao? (2*9+2+0-0-2)/2
Na2O
và Methylidyne:CH
vàCCl4He
. Đây là một số trường hợp góc có thể phá vỡ một vài giải pháp. Nhân tiện, không phải nó quan trọng đối với bất kỳ ai khác ngoài Mathicala (có lẽ), nhưng chúng ta có thể cho rằng các hợp chất (có thể) tồn tại không?