首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碳氢化合物中有多少个原子?

碳氢化合物中有多少个原子?
EN

Code Golf用户
提问于 2019-12-05 20:31:44
回答 4查看 3.3K关注 0票数 28

碳氢化合物中有多少个原子?

碳氢化合物是由氢原子和碳原子组成的化合物。对于这个挑战,我们只考虑三种最简单的碳氢化合物:烷烃、烯烃和没有分支的炔类。

含有n碳原子的烷烃含有2n+2氢原子。含n碳原子的烯烃含有2n氢原子。含n碳原子的炔中含有2n-2氢原子。

每种碳氢化合物都有一个前缀,表示它所包含的碳原子数,如果它分别是烷烃、烯烃或炔,则后缀为aneeneyne。数字前缀如下:

代码语言:javascript
复制
1  <-> meth
2  <-> eth
3  <-> prop
4  <-> but
5  <-> pent
6  <-> hex
7  <-> hept
8  <-> oct
9  <-> non
10 <-> dec

例如,我们可以看到propane有3个碳原子和8个氢原子,heptyne有7个碳原子和12个氢原子。

挑战

您的任务是编写一个函数或程序,接收表示碳氢化合物名称的字符串或字符列表,并生成或输出碳氢化合物分子中碳原子和氢原子的数目。

对于30个碳氢化合物名称中的每一个,代码必须至少接受该名称的一个可能大写。例如,如果您的代码适用于mEthane,而不是methaneETHAnE而不是ETHANE,以及Propane而不是propane,这是很好的。输入methenemethyne可能会提供未定义的输出,因为它们不是真正的化学品。

输入和输出可以采用任何方便的格式。你不需要标记哪个数字代表碳,哪个代表氢,只需保持数字的顺序一致。

你可以假设输入将对应一个有效的碳氢化合物,最多有10个碳原子。

示例

代码语言:javascript
复制
Possible Input -> Possible Output
Methane        -> 1 4
propane        -> 3 8
Heptyne        -> 7 12
Decene         -> 10 20

规则

  • 没有标准的漏洞。
  • 以字节为单位的最短代码获胜。
EN

回答 4

Code Golf用户

发布于 2019-12-06 01:41:08

Python 3.8,60字节

与其他答案一样,除以Prop-Hept-开头的名称外,所有名称都必须是小写。

代码语言:javascript
复制
lambda x:(c:=' mePbphHond'.find(x[0]),c+'ea'.find(x[-3])<<1)

-4字节感谢@Arnauld

在网上试试!

有趣的事实:

我观察到的另一个有趣的事实是:

  • ord(a)=97\to9-7=2,这是我们必须增加的烷烃数。
  • ord(e)=101\to1-0-1=0,这是我们必须为烯烃添加的数字。
  • ord(y)=121\to1-2-1=-2,这是我们要为炔添加的数字。

我不认为我可以用这种方式修改我的答案成为更少的字节感谢它是现在,但我认为它是值得一提的,也许另一个答案可以有效地使用它!

上述思想的一个实现是后一

代码语言:javascript
复制
lambda x:(c:=' mePbphHond'.find(x[0]),2*c+reduce(lambda i,j:i-j,map(int,str(ord(x[-3])))))
from functools import reduce

这显然是更多的字节(119)。

票数 3
EN

Code Golf用户

发布于 2019-12-05 21:26:06

Python 3,83字节

代码语言:javascript
复制
x=input();n=list('_mepbPhHond').index(x[0]);print(n,2*n+{'a':2,'e':0,'y':-2}[x[-3]])

在网上试试!

-51个字节感谢79037662字节

票数 1
EN

Code Golf用户

发布于 2019-12-05 23:59:08

木炭,39字节

代码语言:javascript
复制
≔⊘⁺³⌕”↶↓>AkQN!{a⁶⟧”…θ⁻Lθ⁵ηI⟦η⊗⁻⁺η№θa№θy

在网上试试!链接是详细的代码版本。在较低的情况下输入,并输出碳原子和氢原子在不同的线上。解释:

代码语言:javascript
复制
…θ⁻Lθ⁵

删除输入的最后5个字符。

代码语言:javascript
复制
⌕”↶↓>AkQN!{a⁶⟧”...

在压缩字符串e prb peh heo n d中搜索结果前缀。请注意,在e之前有一个空格,因此前缀可以在-1 (th?ne)、1表示e(th?ne)、3表示pr(op?ne)等位置找到。

代码语言:javascript
复制
≔⊘⁺³...η

将3加到该位置,然后将产生的碳原子数目减半并存储起来。

代码语言:javascript
复制
I⟦η

输出碳原子。

代码语言:javascript
复制
⊗⁻⁺η№θa№θy

..。并调整输入中是否有ay,然后加倍给出氢原子的数目。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/196667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档