Tingkat Ketidakjenuhan
Ini bukan teka-teki kode yang sangat sulit - tetapi saya tertarik untuk melihat banyak cara Anda menyelesaikannya.
Derajat Unsaturasi adalah jumlah ikatan kimia ganda antara atom, dan / atau bilangan cincin dalam suatu senyawa kimia.
Anda akan diberikan rumus molekuler senyawa kimia dalam bentuk XaYbZc (di mana a, b dan c adalah jumlah atom X, Y atau Z dalam senyawa) - formulanya bisa panjang dan mengandung unsur kimia apa pun dalam tabel periodik (meskipun elemen selain C, H, N, F, Cl, Br, saya dapat diabaikan karena tidak ditampilkan dalam rumus). Senyawa ini akan mengandung setidaknya satu atom karbon. Anda harus menghitung dan menampilkan Derajat Ketidakjenuhannya.
Misalnya, senyawa benzena (gambar di bawah) memiliki DoU 4 karena memiliki tiga ikatan rangkap (ditunjukkan oleh garis ganda antara atom), dan cincin tunggal (sejumlah atom yang terhubung dalam satu lingkaran):
Seperti yang didefinisikan oleh LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Dimana:
C
adalah jumlah atom karbonN
adalah jumlah atom nitrogenX
adalah jumlah atom halogen (F
,Cl
,Br
,I
)H
adalah jumlah atom hidrogen
Kasus uji:
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
Untuk penjelasan tentang CH lihat di sini
Intinya, Anda harus mengidentifikasi jika ada unsur-unsur di atas (C, H, N, F, Cl, Br, I) dalam senyawa, dan jika ada berapa banyak. Kemudian, hitung Derajat Ketidakjenuhan menggunakan rumus di atas.
Hanya C, H, N, F, Cl, Br, dan I yang merupakan input yang valid untuk rumus DoU. Untuk keperluan teka-teki ini, elemen lainnya dapat diabaikan sepenuhnya (mis. Jika komponnya adalah C6H6Mn hasilnya masih 4). Jika tidak ada senyawa di atas, jawabannya adalah nol.
Anda dapat mengasumsikan bahwa semua input senyawa secara kimiawi memungkinkan, mengandung setidaknya satu atom karbon, dan diketahui ada. Jika input tidak valid, program dapat menampilkan 0 atau -1, atau tidak menghasilkan apa-apa.
Aturan
Aturan dan celah IO standar berlaku. Input harus berupa string standar, dan Anda dapat mengasumsikan input tidak akan kosong. Ini adalah codegolf - jadi kode terpendek dalam byte menang.
Na2O
and Methylidyne:CH
andCCl4He
. Ini adalah beberapa kasus sudut yang dapat memecahkan beberapa solusi. Ngomong-ngomong, bukankah itu penting bagi orang lain selain Mathematica (mungkin), tetapi dapatkah kita berasumsi bahwa senyawa (dapat) ada?C9H2O1 --> 0
. Bukankah seharusnya angka 9?(2*9+2+0-0-2)/2
Jawaban:
JavaScript (ES6),
117112 bytePengembalian
0
untuk input yang tidak valid.Uji kasus
Tampilkan cuplikan kode
Versi alternatif, 103 byte
Jika input dijamin valid - karena pengantar tantangan menyesatkan - kita bisa melakukan:
Demo
Tampilkan cuplikan kode
sumber
Python 3 ,
142 151148 byteMengembalikan 0 pada kesalahan.
Berkat @HyperNeutrino menurunkan byte.
Cobalah online!
sumber
dict
sana!Pip ,
7067 byteMengambil rumus kimia sebagai argumen baris perintah. Output
0
untuk input yang tidak valid. Cobalah online!Penjelasan
Menggunakan serangkaian penggantian regex untuk mengubah rumus kimia menjadi rumus matematika, mengevaluasinya, dan membuat beberapa penyesuaian untuk mendapatkan nilai akhir.
Pengganti (versi yang sedikit tidak diubah):
Kami mengevaluasi string yang dihasilkan dengan
V
. Ini memberi kita2C + N − X − H
. Untuk mendapatkan nilai yang benar, kami melakukan penyesuaian berikut:sumber
C (gcc) , 195
197202byteMungkin jawaban terpanjang.
Cobalah online!
Mengembalikan 0 pada kesalahan.
sumber