首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找氧化态

寻找氧化态
EN

Code Golf用户
提问于 2017-05-22 10:19:24
回答 1查看 354关注 0票数 7

挑战

找出给定分子中每个原子的氧化状态。这些可以作为列表输出或以其他形式输出。

规则

一个分子的总氧化状态总是为零。总氧化态是分子中每个原子的氧化态之和。

以下原子具有恒定的氧化状态:

  • 氢,H,总是处于+1状态
  • 氧气,O,总是处于-2状态
  • 所有组1元素都有一个状态+1
  • 所有组2元素的状态都为+2
  • 氟,F,总是处于-1状态。
  • 氯,Cl,总是处于-1状态

在单原子分子(如H2S8)中,所有原子的状态都是0。即(H20, 0S80, 0, 0, 0, 0, 0, 0, 0)

第1组元素是:Li, Na, K, Rb, Cs, Fr。第2组元素是:Be, Mg, Ca, Sr, Ba, Ra

你就能计算出分子中每个原子的状态。不会有模糊的输入(即不会给您H2O2P4Br6)。

你应该输出单个原子的氧化状态,而不是总态。

如果分子中有一个元素没有列在上面的列表中,你需要自己计算出它的氧化状态,因为所有原子的氧化态之和等于零。

这些分子不一定存在于现实生活中。

你永远不会得到一个原子,如TiF

不允许内置函数访问关于氧化状态的数据。

示例

代码语言:javascript
复制
Input > Output
H2O > +1, +1, -2
CO2 > +4, -2, -2
CH4 > -4, +1, +1, +1, +1
H2SO4 > +1, +1, +6, -2, -2, -2, -2
NaHCO3 > +1, +1, +4, -2, -2, -2
XeF8 > +8, -1, -1, -1, -1, -1, -1, -1, -1
TiCl2 > +2, -1, -1
P4 > 0, 0, 0, 0

以字节为单位的最短代码获胜。

EN

回答 1

Code Golf用户

发布于 2017-05-22 14:29:14

Python 3,272个字节

代码语言:javascript
复制
s=input()+'A';n='';l=[1]
for i in s:
 if'Z'<i:l[-1]+=i
 elif'9'<i:l+=[l.pop()]*int(n or 1)+[i];n=''
 else:n+=i
i=lambda s:s.split().count
l=[i('Li H Na K Rb Cs Fr')(s)+i('Be Mg Ca Sr Ba Ra')(s)*2-i('F Cl O O')(s)for s in l[1:-1]]
print([k or-sum(l)//l.count(0)for k in l])

在网上试试!

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

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

复制
相关文章

相似问题

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