Doymamışlık Derecesi
Bu özellikle zor bir kod bulmaca değil - ama bunu çözmek için birden fazla yol görmek istiyorum.
Doygunluk Derecesi, atomlar arasındaki çift kimyasal bağ sayısı ve / veya kimyasal bir bileşikteki halka sayısıdır.
XaYbZc formunda bir kimyasal bileşiğin moleküler formülü verilecektir (burada a, b ve c, bileşikteki X, Y veya Z atomlarının sayısıdır) - formül herhangi bir uzunlukta olabilir ve herhangi bir kimyasal element içerebilir periyodik tabloda (C, H, N, F, Cl, Br, I dışındaki elementler formülde bulunmadığı için yok sayılabilir). Bileşik en az bir karbon atomu içerecektir. Doymamışlık Derecesini hesaplamalı ve göstermelisiniz.
Örneğin, bileşik benzen (aşağıda resmedilmiştir), üç çift bağa (atomlar arasında çift çizgi ile gösterilmiştir) ve tek bir halkaya (bir döngüye bağlı birkaç atoma) sahip olduğu için DoU 4'e sahiptir:
LibreTexts tarafından tanımlandığı gibi :
DoU = (2C + 2 + N - X - H) / 2
Nerede:
C
karbon atomu sayısıN
azot atomlarının sayısıdırX
halojen atomlarının sayısı (F
,Cl
,Br
,I
)H
hidrojen atomu sayısıdır
Test senaryoları:
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'nin açıklaması için buraya bakın
Özünde, bileşikte yukarıdaki elementlerden herhangi birinin (C, H, N, F, Cl, Br, I) olup olmadığını ve varsa kaç tane olduğunu tanımlamanız gerekir. Ardından, yukarıdaki formülü kullanarak Doygunluk Derecesini hesaplayın.
DoU formülü için yalnızca C, H, N, F, Cl, Br ve I geçerli girişlerdir. Bu bulmacanın amaçları doğrultusunda, diğer elementler tamamen göz ardı edilebilir (örneğin, bileşik C6H6Mn olsaydı sonuç yine de 4 olacaktır). Yukarıdaki bileşiklerin hiçbiri yoksa, cevap sıfır olacaktır.
Tüm bileşik girdilerinin kimyasal olarak mümkün olduğunu, en az bir karbon atomu içerdiğini ve var olduğu biliniyor olabilirsiniz. Giriş geçersizse, program 0 veya -1 çıktısını verebilir veya sonuç vermeyebilir.
kurallar
Standart IO kuralları ve boşlukları geçerlidir. Giriş standart bir dize olmalıdır ve girişin boş olmayacağını varsayabilirsiniz. Bu codegolf - bayttaki en kısa kod kazanıyor.
C9H2O1 --> 0
. 9 olmamalı mı? (2*9+2+0-0-2)/2
Na2O
ve Metilidin:CH
veCCl4He
. Bunlar birkaç çözümü kırabilecek bazı köşe durumlarıdır. Bu arada, Mathematica (muhtemelen) dışında herhangi biri için önemli değil, ama bileşiklerin var olabileceğini varsayabilir miyiz?