Elektron konfigürasyonu


17

Gelen atom fizik ve kuantum kimyası , elektron konfigürasyonu dağılımı elektronların bir bölgesinin atomu de Atomik orbitaller . Örneğin, neon atomunun elektron konfigürasyonu 1s 2 2s 2 2p 6'dır . ( Wikipedia'dan )

Meydan okuma

Göreviniz , bir elementin atom numarasını temsil eden bir sayı almak ve bu elementin Aufbau prensibi tarafından tanımlanan elektron konfigürasyonunu çıkarmaktır .

Demir (26) elektron konfigürasyonuna sahiptir . Ancak, üst simgeler gereksizdir; 26 için çıktı çizgileri boyunca olmalıdır .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

Şartname

  • Aralık dışında herhangi bir girişi işlemek zorunda değilsiniz 1 <= n <= 118.
  • Çıktınız test durumları gibi görünmelidir, ancak (kenara herhangi bir rakam karakteri / karakterleri kullanabilir s, p, dve ffarklı orbitalleri sınırlamak için).
  • Yörünge adlarını / değerlerini / değiştiricilerini içeren bir dize döndürmeli / yazdırmalısınız; bir dizi döndüremez / yazdıramazsınız.
  • Aufbau ilkesinin istisnalarını ele almanıza gerek yoktur; istisnalar varsa, "yanlış" yapılandırma yazdırmak iyidir.

Örnekler:

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

İşte tüm elektronik orbitallerin bir listesi. İçerebilecekleri maksimum değerler adın altındadır:

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

Test Durumları

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

İşte tam bir liste ve tür bir referans uygulaması ( Çevrimiçi deneyin! )

Kazanma Koşulu

Bu , en kısa kod kazanır!


2
IIRC, sabit çıkışlı sonlu girdi seti üzerinde çalışan her zorluk kolmogorov etiketi için adaydır. Güzel bir meydan okuma.
Uriel

6
Test vakalarında, Madelung kuralını ihlal eden 3dönce 4s, 4dönce 5s, 6ssonra 4fve sonra doldurulmuş gibi görünüyor . Hamurdaki yanlış elektron konfigürasyonlarını yazdıran programları golf oynar mıyız? 5d
JungHwan Min

5
Ayrıca, Aufbau ilkesinin istisnaları vardır ( 4s1 3d5bunun yerine Chromium (atom no. 24) yerine 4s2 3d4). Korumalı alan içinde sorulduğunu ama asla cevaplanmadığını görüyorum. Bu sorunu görmezden geliyor muyuz?
JungHwan Min

1
OMG yemin ederim ki aynı soruyu da
paylaşacağım

Yanıtlar:


2

Jöle , 63 62 56 55 bayt

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

Çevrimiçi deneyin!

Base dekompresyon ile 6 bayt tasarruf için user202729 sayesinde!

açıklama

İlk olarak, ikinci linkteki [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']kodu içeren listeyi oluşturuyorum “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤.

  • “ŒµḊuÆẓƙỊ’1223334445545665677taban 250'ye sıkıştırılan sayıdır. Dverir bunu bir basamak listesine dönüştürür.
  • “çƥ÷£ḟ’ṃ“spdf”taban 250 sayısını “çƥ÷£ḟ’taban 4 olarak değiştirir ve dizge “spdf”verimini dizine ekler 'sspspdspdspfdspfdsp'. Buna user202729 katkıda bulunmuştur.

Liste daha sonra ilk bağlantıya götürülür Ç. İlk bağlantı aşağıdakileri yapar:

Ḋ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...]

Şimdi ikinci bağlantıya dönelim. Bununla birlikte , her bir alt [[1,2,2,3...7],['sspspd...p']]listedeki öğelerin her birini yeni listemizdeki sayılarla tekrarlarız [2,2,6...]. Bu sonuç verir [[1,1,2,2,2,2...],['sssspp...']]. Zsonuç veren iki alt listeyi fermuarlar [[1,'s'],[1,'s'],[2,'s']...].

Şimdi ana bağlantıya. ¢yukarıda açıklanan tupleslerin nihai listesini veren ikinci bağlantıyı çağırır. Programa girişin örnek olarak 5 olduğunu varsayın.

¢ḣŒ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

Dizeyi sıkıştırmanın herhangi bir yolu var sspspdspd...mı?
MD XF

@ MDXF denedim ama daha uzun oldu. Ayrıca çeşitli şekillerde inşa etmeye çalıştım ve bireysel parçalar daha kısaydı, ancak bir bütün olarak daha uzun oldu
dylnan

@ “çƥ÷£ḟ’ṃ“spdf”¤6-bayt için dylnan . Kullanılan bu taban 250 tamsayı için ve taban dekompresyon için.
user202729

@ user202729 güzel, teşekkür ederim!
dylnan

7

Zorunlu Tampio , 930 bayt

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.

Ilot üzerinde Yöllä . 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ö, jonkailoja 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ö üzerinde oman ilon ensimmäinenilo ja Ujo ilo üzerinde müsait, yön ensimmäinenilo, Jos iso Luku üzerinde 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 , müsait, yön iloiksi asetetaan müsait, yön ilot toisesta alkaen ja izo luku vähennettynä ujolla ilolla Juo müsait, ilon ja , Jos izo luku üzerinde pienempi tai yhtä suuri kuin Ujo ilo, niin iso ilo näyttää müsait, luvun. Olkoon oma muuttuja uusi muuttuja. Kun iso sivu avautuu , omaan muuttujaan luetaan luku jaoman muuttujan arvo juo ison sivun.

Çevrimiçi sürüm

Bu çok basit bir uygulamadır. Golfed versiyonunda benim basitçe gibi kısa kelimelerle sözcüklerin yerini ilo, , iso, oma, vb

Ungolfed:

Alkiot üzerinde Listalla.

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 , orbitaali , orbitaali , orbitaali , orbitaali , orbitaali , orali , aliali "6d", orbitaali "7s" ja orbitaali "7p" .

Olkoon lyhyt maksimilista uusi lista, jonka alkioita ovat 2 , 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 ja 6 .

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

  • nykyinen sivu näyttää nykyisen orbitaalin, missä nykyinen orbitaali üzerinde lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi üzerinde lyhyen maksimilistan ensimmäinenalkio,
  • Jos pienehkö elektronimäärä üzerinde suurempi kuin nykyinen maksimi, niin

    • nykyinen sivu näyttää nykyisen maksimin,
    • nykyinen sivu näyttää Valin " " ,
    • 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ä maksimilla nykyisellä sivulla,
  • ja , Jos pienehkö elektronimäärä üzerinde pienempi tai yhtä suuri kuin nykyinen maksimi,
    • niin nykyinen sivu näyttää pienehkön elektronimäärän.

Olkoon mukava muuttuja uusi muuttuja.

Kun nykyinen sivu avautuu ,

  • mukavaan muuttujaan luetaan luku
  • ja jaetaan orbitaaleille mukavan muuttujan arvo nykyisellä sivulla.

Çevrimiçi sürüm

Tercüme:

Bir liste vardır öğeleri.

Let kısa yörünge liste olması yeni bir liste, kendi ürün olan yörünge "1s"yörünge, "2s"yörünge, "2p"yörünge, "3s"yörünge, "3p"yörünge, "3d"yörünge, "4s"yörünge, "4p"yörünge, "4d"yörünge, "5s"yörünge, "5p"yörünge, "4f", yörünge "5d", yörünge "6s", yörünge "6p", yörünge "5f", yörünge "6d", yörünge "7s" ve yörünge "7p".

Let kısa azami liste olması yeni bir liste, kendi ürün olan 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 ve 6 .

Ne zaman elektronların az sayıda orbitallere için ayrılmıştır şimdiki sayfaya,

  • Geçerli sayfa gösterileri akım yörünge, akım yörünge olduğu kısa yörünge listedeki ilk öğe ve güncel maksimum olduğu kısa azami listedeki ilk eleman,
  • Eğer elektron az sayıda daha büyük olan geçerli maksimum,
    • geçerli sayfa geçerli maksimum değeri gösterir ,
    • geçerli sayfa alanı gösterir" " ,
    • kısa yörünge listesinin öğeleri ikinci yörüngeden başlayarak kısa yörünge listesinin öğeleri olacak şekilde ayarlanır ,
    • kısa maksimum listenin öğeleri , ikinci kısa listeden başlayarak kısa maksimum listenin öğeleri olacak şekilde ayarlanır
    • ve biri tarafından çıkarılan az sayıda elektron mevcut sayfadaki orbitallere bölünür ,
  • ve , eğer elektron az sayıda daha küçük ya da buna eşittir , mevcut maksimum,
    • Geçerli sayfa gösterir az sayıda veya elektronları.

Let güzel değişken olması , yeni bir değişken.

Ne zaman geçerli sayfa açılır ,

  • güzel değişkene bir sayı okunur
  • ve güzel değişkenin değeri geçerli sayfadaki orbitallere bölünür .

Çeviri yaklaşık, İngilizceyi daha doğal hale getirmek için kelime sırasını değiştirmek zorunda kaldım.


1
wtf bu iyi ...
FantaC

Elbette, bu dilin tüm özelliklerine sahip daha örtük bir dil var.
Kimse

Bu dili anlayabilmemiz için İngilizceye çeviri eklemek kadar nazik olabilir misiniz?
Zacharý

@ Zacharý ekledim.
fergusq



4

JavaScript (ES6), 102 bayt

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])

Test senaryoları

Biçimlendirilmiş ve yorumlanmış

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

Swift , 177 175 156 bayt

@ Arnauld'un Javascript cevabına dayanarak gevşekçe

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}}

Çevrimiçi deneyin!

Elektron gruplarında boşluk olmadan, 190 187 169 bayt:

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}}

Çevrimiçi deneyin!


1

C (GCC), 260 187 167 156 152 147 143 138 bayt

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

Çevrimiçi deneyin!Referans uygulamasından golf.

Stack Exchange unprintables kaldırır, böylece değeri mile değiştirilir"..." .

Burada, tamsayı dizisini {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}tamsayıların gerçek bayt değerleri ile değiştiren bir dizede yazdırılamayan öğeler kullandığından, programın ters çevrilebilir bir hexdump'ıdır .

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++));}

Alternatif olarak, kodu TIO bağlantısından kopyalayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.