电子配置


17

原子物理学量子化学电子组态是分布的电子的的原子原子轨道。例如,氖原子的电子构型为1s 2 2s 2 2p 6(来自维基百科

挑战

您面临的挑战是获取一个表示元素原子序数的数字,并输出根据Aufbau原理定义的该元素的电子构型

铁(26)具有电子构型。但是,上标是不必要的。26的输出应该沿着1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

规格

  • 您不必处理超出范围的任何输入1 <= n <= 118
  • 你的输出应该是这个样子的测试用例,但你可以(从侧面使用任何非数字字符/字符spd,和f)来分隔不同的轨道。
  • 您必须返回/打印一个包含轨道名称/值/定界符的字符串;您不能简单地返回/打印数组。
  • 您无需处理Aufbau原则的任何例外情况;在有例外的情况下,可以打印“不正确”的配置。

例子:

Input -> Valid output            -> Invalid output
16    -> 1s2 2s2 2p6 3s2 3p4     -> 1s22s22p63s23p4
16    -> 1s2, 2s2, 2p6, 3s2, 3p4 -> [[1, 2], [2, 2], [2, 6], [3, 2], [3, 4]]
17    -> 1s2+2s2+2p6+3s2+3p5     -> 1s2s2s2s2p6p3s2s3p5

这是所有电子轨道的清单。它们可以包含的最大值低于名称:

name: 1s 2s 2p 3s 3p 3d 4s 4p 4d 5s 5p 4f 5d 6s 6p 5f 6d 7s 7p
max:  2  2  6  2  6  10 2  6  10 2  6  14 10 2  6  14 10 2  6

测试用例

Input -> Output
1     -> 1s1
2     -> 1s2
16    -> 1s2 2s2 2p6 3s2 3p4
50    -> 1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10 5s2 5p2
115   -> 1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10 5s2 5p6 4f14 5d10 6s2 6p6 5f14 6d10 7s2 7p3

这是完整的列表和各种参考实现请在线尝试!

获奖条件

因为这是,所以最短的代码获胜!


2
IIRC在有限的输入集上以恒定的输出运行的每个挑战都是kolmogorov标签的候选人。很好的挑战。
Uriel

6
在测试用例中,3d似乎在违反马德隆规则的之前4s4d之前5s6s之后4f和之后被填充。我们应该打高尔夫程序在胶仓上打印不正确的电子结构吗?5d
JungHwan Min

5
此外,Aufbau原理也有例外(例如Chromium(24号原子)用4s1 3d5代替4s2 3d4)。我看到它在沙盒帖子中被询问了,但从未得到回答。我们忽略这个问题吗?
JungHwan Min

1
天哪,我发誓我今天要发同样的问题……
FantaC

1
MD XF

Answers:


2

果冻63 62 56 55字节

ḊFµi@€QḤ’Ḥ
“ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤µxÇZ
¢ḣŒg'µQ€żL€K

在线尝试!

感谢user202729通过基本解压缩节省了6个字节!

说明

首先,我构建列表 [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']使用“ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤第二个链接中的代码。

  • “ŒµḊuÆẓƙỊ’1223334445545665677压缩为基数250 的数字。D的数字。将其转换为数字列表。
  • “çƥ÷£ḟ’ṃ“spdf”将基数250更改“çƥ÷£ḟ’为基数4并将其索引到字符串“spdf”yield中'sspspdspdspfdspfdsp'。这是由user202729贡献的。

然后将该列表带到第一个链接Ç。第一个链接执行以下操作:

ḊFµQiЀµḤ’Ḥ
ḊF           Dequeue then flatten yields 'sspspd...'. Ṫ doesn't work because it modifies the input.
  µ          New monadic link
   Q         Unique elements → 'spdf'
    iЀ      The index of each of 'sspspd...' into the string 'spdf' → [1,1,2,1,2,3...]
       µ     New monadic link. This prevents Ḥ from acting on the right argument of iЀ.
        Ḥ’Ḥ  Takes [1,1,2,1...] and computes 2(2l+1) → [2,2,6,2,6,10...]

现在回到第二个链接。通过我们[[1,2,2,3...7],['sspspd...p']]在新列表中的数字重复每个子列表中的每个元素[2,2,6...]。这产生了[[1,1,2,2,2,2...],['sssspp...']]Z压缩两个产生的子列表[[1,'s'],[1,'s'],[2,'s']...]

现在到主链接。¢调用第二个链接,该链接产生上述的元组的最终列表。假设该程序的输入为5。

¢ḣŒg'µQ€żL€K
¢             Calls the second link as a nilad which yields the final list of tuples described above
 ḣ            Takes the first 5 tuples → [[1,'s'],[1,'s'],[2,'s'],[2,'s'],[2,'p']]
  Œg'         Group together runs of equal elements → [[[1,'s'],[1,'s']],[[2,'s'],[2,'s']],[[2,'p']]]
     µ        New monadic link
      Q€      Unique elements of each of these runs
         L€   Length of each of these runs
        ż     Zip these together → [[[1,'s'],2],[[2,'s'],2],[[2,'p'],1]]
           K  Join this list with spaces → 1s2 2s2 2p1

有什么办法压缩sspspdspd...字符串吗?
MD XF

我尝试了@MDXF,但结果却更长了。我还尝试了各种方式构造它,单个部分虽然较短,但总体上却更长一些
dylnan

@dylnan “çƥ÷£ḟ’ṃ“spdf”¤为-6个字节。使用为基数250的整数,并为基地减压。
user202729

@ user202729很好,谢谢!
dylnan '17

7

命令式坦皮奥,930字节

Yöllä on ilot.Olkoon oma ilo uusi yö, jonka iloja ovat ilo"1s",ilo"2s",ilo"2p",ilo"3s",ilo"3p",ilo"3d",ilo"4s",ilo"4p",ilo"4d",ilo"5s",ilo"5p",ilo"4f",ilo"5d",ilo"6s",ilo"6p",ilo"5f",ilo"6d",ilo"7s"ja ilo"7p".Olkoon iso yö uusi yö, jonka iloja ovat 2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2 ja 6.Kun iso luku juo ison ilon,iso ilo näyttää oman yön,missä oma yö on oman ilon ensimmäinen ilo ja ujo ilo on ison yön ensimmäinen ilo,jos iso luku on suurempi kuin ujo ilo,niin iso ilo näyttää ujon ilon,iso ilo näyttää ilon" ",oman ilon iloiksi asetetaan oman ilon ilot toisesta alkaen,ison yön iloiksi asetetaan ison yön ilot toisesta alkaen ja iso luku vähennettynä ujolla ilolla juo ison ilon ja,jos iso luku on pienempi tai yhtä suuri kuin ujo ilo,niin iso ilo näyttää ison luvun.Olkoon oma muuttuja uusi muuttuja.Kun iso sivu avautuu,omaan muuttujaan luetaan luku ja oman muuttujan arvo juo ison sivun.

约洛(Yöllä)伊洛特(ilot)。Olkoon OMA国际劳工组织UUSI哟,jonka iloja ovat 劳工组织"1s"国际劳工组织"2s"国际劳工组织"2p"国际劳工组织"3s"国际劳工组织"3p"国际劳工组织"3d"国际劳工组织"4s"国际劳工组织"4p"国际劳工组织"4d"国际劳工组织"5s"国际劳工组织"5p"国际劳工组织"4f"国际劳工组织"5d"国际劳工组织"6s"国际劳工组织"6p"国际劳工组织"5f"国际劳工组织"6d"国际劳工组织"7s"JA 劳工组织"7p"Olkoon ISO哟UUSI哟, jonkailoja ovat 226261026102614102614102 JA 6 ISO鹿谷JUO ISON ilon,ISO国际劳工组织näyttää阿曼YON,弥撒 OMA哟阿曼ilon ensimmäinen国际劳工组织JA羽城国际劳工组织 ISON YON ensimmäinen国际劳工组织,乔斯异鹿谷 suurempi kuin羽城国际劳工组织,niin异国际劳工组织näyttää ujon ilon,异国际劳工组织näyttää ilon" ",阿曼ilon iloiksi asetetaan阿曼ilon ilot toisesta alkaen,ISON YON iloiksi asetetaan ISON YON ilot toisesta alkaen JA ISO鹿谷vähennettynä ujolla ilolla JUO ISON ilon JA乔斯异鹿谷 pienempi yhtä suuri kuin羽城国际劳工组织,niin异国际劳工组织näyttää ISON luvun。Olkoon oma muuttuja uusi muuttuja。异sivu avautuu,omaan muuttujaan luetaan 鹿谷 JA阿曼muuttujan arvoJUO ISON sivun。

在线版

这是一个非常简单的实现。在golfed版本我只是换成短的话喜欢的话iloisooma,等。

取消高尔夫:

Listalla alkiot上。

Olkoon lyhyt orbitaalilista uusi lista,jonka alkioita ovat orbitaali "1s"orbitaali "2s"orbitaali "2p"orbitaali "3s"orbitaali "3p"orbitaali "3d"orbitaali "4s"orbitaali "4p"orbitaali "4d"orbitaali "5s"orbitaali "5p"orbitaali "4f"orbitaali "5d"orbitaali "6s"orbitaali "6p"orbitaali "5f" orbitaali "6d"orbitaali "7s" JA orbitaali "7p"

奥尔孔 lyhyt maksimilista UUSI LISTA,jonka alkioita ovat 226261026102614102614102 JA 6

jaetaan orbitaaleille pienehköelektronimääränykyiselläsivulla,

  • nykyinen sivunäyttäänykyisen orbitaalinmissänykyinen orbitaali on lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi on lyhyen maksimilistan ensimmäinenalkio,
  • 乔斯 pienehköelektronimäärä suurempi kuin nykyinen maksimi, niin

    • nykyinen sivu näyttää nykyisen maksimin,
    • nykyinen sivu näyttää 华菱 " "
    • lyhyen orbitaalilistan alkioiksi asetetaan lyhyen orbitaalilistan alkiot toisesta alkaen
    • lyhyen maksimilistan alkioiksi asetetaan lyhyen maksimilistan alkiot toisesta alkaen
    • JA jaetaan orbitaaleille pienehköelektronimäärä vähennettynä nykyisellämaksimillanykyiselläsivulla,
  • JA乔斯 pienehköelektronimäärä pienempi yhtä suuri kuin nykyinen maksimi,
    • niin nykyinen sivu näyttää pienehkönelektronimäärän。

Olkoon mukava muuttuja uusi muuttuja。

Kun nykyinen sivu avautuu

  • mukavaan muuttujaan luetaan 鹿谷
  • ja jaetaan orbitaaleille mukavan muuttujan arvonykyiselläsivulla。

在线版

翻译:

清单项目。

短轨道列表成为一个新列表,它的项目 轨道"1s",轨道"2s",轨道"2p",轨道"3s",轨道"3p",轨道"3d",轨道"4s",轨道"4p",轨道"4d",轨道"5s",轨道"5p",轨道"4f",轨道"5d",轨道,轨道"6s",轨道"6p",轨道"5f",轨道"6d",轨道"7s" 轨道"7p"

最大的最短列表新列表,它的项目 2、2、6、2、6、10、2、6、10、2、6、14、10、2、6、14、10、2和6 。

少数电子被分成当前页面的轨道时,

  • 当前页面显示当前的轨道,在那里当前轨道在短期轨道列表中的第一项当前最大在短期最大列表中的第一个元素,
  • 如果少数电子大于当前的最大,
    • 当前页面显示当前最大值,
    • 当前页面显示空格" "
    • 短轨道列表的元素设置为第二个开始的短轨道列表的元素,
    • 第二个开始的最大短列表的元素设置为最大短列表的元素
    • 小数量的电子通过减去一个被划分到轨道在当前页,
  • 并且如果少量电子小于或等于当前的最大值,
    • 当前页面显示少量或电子。

nice变量新变量。

当前页面何时打开

  • 一个数字被读取到 nice变量
  • 并且 nice变量的值将划分为当前页面的轨道

翻译是近似的,我不得不更改单词顺序以使英语更自然。


1
wtf很好...
FantaC

当然,有一种更隐性的语言具有此语言的所有功能。
没有人

您是否愿意将翻译添加到英语,以便我们能理解该语言?
扎卡里

@Zacharý我添加了它。
fergusq


5

木炭,72字节

Nθ≔”{⊞″I⌀⁼C$Pπ3”α≔⁰ιW›θ⁰«§”o⧴∨c▷⎇_'l|”ι§αι≔⁺×⁴⌕spdf§αι²εI⌊⟦εθ⟧→≔⊕ιι≔⁻θεθ

在线尝试!

在这里,您有详细的版本


4

JavaScript(ES6),102个字节

n=>'0010120120132013201'.replace(/./g,k=>n?++p[m=k*4+2,n-=e=m>n?n:m,k]+'spdf'[k]+e+' ':'',p=[0,1,2,3])

测试用例

格式化和评论

n =>                          // given the atomic number n
  '0010120120132013201'       // list of azimuthal quantum numbers
  .replace(/./g, k =>         // replace each character k in the above string with:
    n ?                       //   if n does not equal 0:
      ++p[                    //     ++p[k] = updated principal quantum number
        m = k * 4 + 2,        //       m = maximum number of electrons
        n -=                  //       subtract from n:
          e = m > n ? n : m,  //         e = min(m, n) = number of electrons
        k                     //       index actually used to access the p[] array
      ] +                     //     followed by:
      'spdf'[k] +             //     the label
      e + ' '                 //     and the number of electrons
    :                         //   else:
      '',                     //     an empty string
    p = [0, 1, 2, 3]          //   initial list of principal quantum numbers
  )                           // end of replace()

2

雨燕177 175 156字节

松散地基于@Arnauld的Javascript答案

func f(n:Int){var i=n,a=0,b=[0,1,2,3];[0,0,1,0,1,2,0,1,2,0,1,3,2,0,1,3,2,0,1].map{a=$0*4+2;b[$0]+=1;i>0 ?print(b[$0],"spdf".map{$0}[$0],min(a,i)):();i-=a}}

在线尝试!

190 187 169字节不包含电子基团中的空格:

func f(n:Int){var i=n,a=0,b=[0,1,2,3];[0,0,1,0,1,2,0,1,2,0,1,3,2,0,1,3,2,0,1].map{a=$0*4+2;b[$0]+=1;i>0 ?print(b[$0],"spdf".map{$0}[$0],min(a,i),separator:""):();i-=a}}

在线尝试!


1

C(GCC),260 187 167 156 152个 147 143 138字节

i,*m;f(e){for(m=L"...",i=0;e>0;printf("%.2s%d ","1s2s2p3s3p3d4s4p4d5s5p4f5d6s6p5f6d7s7p"+i++*2,(e-=*m)<0?*m+e:*m++));}

在线尝试!从参考实现开始。

StackExchange删除无法打印的内容,因此将的值m替换为"..."

这是程序的可逆十六进制转储,因为它使用字符串中的unprintables,该字符串将整数数组替换为整数{2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}的文字字节值。

00000000: 692c 2a6d 3b66 2865 297b 666f 7228 6d3d  i,*m;f(e){for(m=
00000010: 4c22 0202 0602 065c 6e02 065c 6e02 060e  L".....\n..\n...
00000020: 5c6e 0206 0e5c 6e02 0622 2c69 3d30 3b65  \n...\n..",i=0;e
00000030: 3e30 3b70 7269 6e74 6628 2225 2e32 7325  >0;printf("%.2s%
00000040: 6420 222c 2231 7332 7332 7033 7333 7033  d ","1s2s2p3s3p3
00000050: 6434 7334 7034 6435 7335 7034 6635 6436  d4s4p4d5s5p4f5d6
00000060: 7336 7035 6636 6437 7337 7022 2b69 2b2b  s6p5f6d7s7p"+i++
00000070: 2a32 2c28 652d 3d2a 6d29 3c30 3f2a 6d2b  *2,(e-=*m)<0?*m+
00000080: 653a 2a6d 2b2b 2929 3b7d                 e:*m++));}

或者,您可以仅从TIO链接复制代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.