電子配置


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タグの候補です。ナイスチャレンジ。
ウリエル

6
テストケースで3dは、マデルングの規則に違反する前4s4d5s6s4f、およびが満たされているようです。間違った電子配置をペーストビンに印刷するプログラムをゴルフするべきですか?5d
ジョンファンミン

5
また、(クロムなどの(原子番号24)を有するAufbau原則に例外がある4s1 3d5代わりに4s2 3d4)。サンドボックスの投稿で質問されたが、回答がなかったことがわかります。その問題を無視しますか?
ジョンファンミン

1
OMG私はこの正確な同じ質問...今日投稿するつもりだった誓う
FantaC

1
@Uriel 状況完了
MD XF

回答:


2

ゼリー63 62 56 55バイト

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

オンラインでお試しください!

基本解凍で6バイトを保存してくれたuser202729に感謝します!

説明

最初に、2番目のリンクの[[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”生成し'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...]

2番目のリンクに戻ります。で、各サブリストの各要素を[[1,2,2,3...7],['sspspd...p']]新しいリストの番号で繰り返します[2,2,6...]。これはをもたらし[[1,1,2,2,2,2...],['sssspp...']]ます。Zを生成する2つのサブリストを圧縮します[[1,'s'],[1,'s'],[2,'s']...]

さて、メインリンクへ。¢上記のタプルの最終リストを生成する2番目のリンクを呼び出します。例として、プログラムへの入力が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

“çƥ÷£ḟ’ṃ“spdf”¤-6バイトの@dylnan 。使用し、これをベース250の整数のためにとベース解凍のために。
user202729

@ user202729いいね、ありがとう!
ディルナン

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 ILO uusi YO、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イソYO uusi YO、jonkailoja ovat 226261026102614102614102 JA 6くんイソluku 十王 ISONどちらもilon、イソILO näyttääオマーンヨン、ミサ OMA YO オマーンどちらもilon ensimmäinenILO JA ujo ILO ISONヨンensimmäinenILO、ジョスのイソluku suurempi kuin ujo ILO、niinイソILO näyttää ujonどちらもilon、イソILO näyttää どちらもilon" "、オマーンどちらもilon iloiksi asetetaanオマーンどちらもilon ilot toisesta alkaen、ISONヨンiloiksi asetetaan ISONヨンilot toisesta alkaen JA ISO luku vähennettynä ujolla ilolla 十王 ISONどちらもilon JAジョスのイソluku pienempiの TAI yhtä suuri kuin ujo ILO、niinイソILO näyttää ISON luvun。Olkoon oma muuttuja uusi muuttuja。くんイソsivu avautuu、omaan muuttujaan luetaan luku JAオマーン・ムトゥトゥジャン・アルヴォ・ジュオ・イソン・シヴン。

オンライン版

これは非常に簡単な実装です。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"orbitaaliorbitaaliorbitaaliorbitaaliorbitaali "6d"orbitaali "7s" ja orbitaali "7p"

Olkoon lyhyt maksimilista uusiリスタ、jonka alkioita ovat 226261026102614102614102 JA 6

Kun jaetaan orbitaaleillepienehkö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 sivunä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。

くん nykyinen sivu avautuu

  • mukavaan muuttujaan luetaan luku
  • 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 。

ときに電子の数が少ないが軌道に分割され、現在のページで、

  • 現在のページ示す電流軌道、現在の軌道がある短い軌道リストの最初の項目現在の最大値である短い最大のリストの最初の要素、
  • 場合電子の数が少ないよりも大きい最大電流、
    • 現在のページに現在の最大値が表示されます
    • 現在のページが表示さのスペースを" "
    • 短い軌道リストの要素は、2番目から始まる短い軌道リストの要素に設定されます
    • 短い最大リストの要素は、2番目から始まる短い最大リストの要素に設定されます。
    • そして、1を引いた少数の電子は、現在のページの軌道に分割されます。
  • そしてあれば電子の数が少ないが、以下である最大電流、
    • 現在のページに、少数または電子が表示されます。

してみましょう素敵な変数があること、新たな変数。

現在のページが開いたら

  • nice変数に数値が読み込まれます
  • そして素敵な変数の値が軌道に分割され、現在のページで。

翻訳はおおよそのもので、英語をより自然にするために語順を変更する必要がありました。


1
WTFの良い...その
FantaC

確かに、これのすべての機能を備えたより暗黙的な言語があります。
誰も

私たちがこの言語を理解できるように、英語に翻訳を追加してくれませんか?
ザカリー

@ザカリー私はそれを追加しました。
fergusq



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回答に基づいたLoosly

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はに置き換えられ"..."ます。

これは、整数配列{2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}を整数のリテラルバイト値で置換する文字列で出力不可能なものを使用するため、プログラムの可逆16進ダンプです。

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リンクからコードをコピーすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.