Konfigurasi elektron

17

Dalam fisika atom dan kimia kuantum , konfigurasi elektron adalah distribusi elektron suatu atom dalam orbital atom . Sebagai contoh, konfigurasi elektron dari atom neon adalah 1s 2 2s 2 2p 6 . (Dari Wikipedia )

Tantangan

Tantangan Anda adalah mengambil nomor yang mewakili nomor atom suatu elemen dan menampilkan konfigurasi elektron elemen tersebut seperti yang didefinisikan oleh prinsip Aufbau .

Besi (26) memiliki konfigurasi elektron . Namun, superskrip tidak perlu; output untuk 26 harus sepanjang baris .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

Spesifikasi

  • Anda tidak harus menangani input apa pun di luar kisaran 1 <= n <= 118.
  • Output Anda harus terlihat seperti uji kasus, tetapi Anda dapat menggunakan non-digit karakter / karakter (selain dari s, p, d, dan f) untuk membatasi orbital yang berbeda.
  • Anda harus mengembalikan / mencetak string yang berisi nama / nilai / penghapus orbital; Anda tidak bisa hanya mengembalikan / mencetak array.
  • Anda tidak perlu menangani pengecualian untuk prinsip Aufbau; di mana ada pengecualian, mencetak konfigurasi "salah" baik-baik saja.

Contoh:

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

Berikut adalah daftar semua orbital elektronik. Nilai maksimum yang dapat dikandungnya di bawah nama:

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

Uji Kasus

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

Ini adalah daftar lengkap dan semacam implementasi referensi ( Coba online! )

Kondisi Menang

Karena ini adalah , kode terpendek menang!

MD XF
sumber
2
IIRC setiap tantangan yang berjalan pada input input yang terbatas dengan output konstan adalah kandidat untuk tag kolmogorov. Tantangan yang bagus.
Uriel
6
Dalam uji kasus, 3dsepertinya diisi sebelum 4s, 4dsebelum 5s, 6ssesudah 4fdan 5d, yang melanggar aturan Madelung . Haruskah kita bermain golf yang mencetak konfigurasi elektron yang salah pada pastebin?
JungHwan Min
5
Juga, ada pengecualian pada prinsip Aufbau (seperti Chromium (nomor atom. 24) yang 4s1 3d5menggantikan 4s2 3d4). Saya melihat bahwa itu diminta di pos kotak pasir tetapi tidak pernah dijawab. Apakah kita mengabaikan masalah itu?
JungHwan Min
1
OMG Saya bersumpah akan memposting pertanyaan yang sama persis ini ... hari ini
FantaC
1
@Uriel selesai status
MD XF

Jawaban:

2

Jelly , 63 62 56 55 byte

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

Cobalah online!

Terima kasih kepada user202729 untuk menghemat 6 byte dengan dekompresi basis!

Penjelasan

Pertama saya membuat daftar [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']dengan kode “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤di tautan kedua.

  • “ŒµḊuÆẓƙỊ’adalah angka yang 1223334445545665677dikompres menjadi basis 250. Dmemberikan ini menjadi daftar digit.
  • “çƥ÷£ḟ’ṃ“spdf”mengubah nomor base 250 “çƥ÷£ḟ’menjadi base 4 dan mengindeksnya menjadi string yang “spdf”menghasilkan 'sspspdspdspfdspfdsp'. Ini disumbangkan oleh user202729.

Daftar ini kemudian dibawa ke tautan pertama Ç. Tautan pertama melakukan hal berikut:

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

Sekarang kembali ke tautan kedua. Dengan kami ulangi setiap elemen dalam setiap sublist dari [[1,2,2,3...7],['sspspd...p']]dengan angka dalam daftar baru kami [2,2,6...]. Ini menghasilkan [[1,1,2,2,2,2...],['sssspp...']]. Zritsleting dua sublist yang menghasilkan [[1,'s'],[1,'s'],[2,'s']...].

Sekarang ke tautan utama. ¢memanggil tautan kedua yang menghasilkan daftar tupel terakhir yang dijelaskan di atas. Asumsikan input ke program adalah 5 sebagai contoh.

¢ḣŒ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
dylnan
sumber
Adakah cara untuk mengompres sspspdspd...string?
MD XF
@ MDXF Saya mencoba tetapi akhirnya menjadi lebih lama. Saya juga mencoba membangunnya dengan berbagai cara dan bagian-bagian individual lebih pendek tetapi secara keseluruhan lebih lama
dylnan
@dylnan “çƥ÷£ḟ’ṃ“spdf”¤untuk -6 byte. Digunakan ini untuk basis 250 integer dan untuk dekompresi basis.
user202729
@ user202729 bagus, terima kasih!
dylnan
7

Tampio Imperatif , 930 byte

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ä di 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 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 Yon, Missa oma yo di oman Ilon ensimmäinenilo ja Ujo ilo di Ison Yon ensimmäinenilo, jos iso luku pada 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 Yon iloiksi asetetaan Ison Yon ilot toisesta alkaen ja iso luku vähennettynä ujolla ilolla Juo Ison Ilon ja , jos iso luku pada 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 jaoman muuttujan arvo juo ison sivun.

Versi online

Ini adalah implementasi yang sangat mudah. Dalam versi golfed saya hanya mengganti kata-kata dengan kata-kata pendek seperti ilo, , iso, oma, dll

Tidak Disatukan:

Listalla di 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" .

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 di lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi di lyhyen maksimilistan ensimmäinenalkio,
  • jos pienehkö elektronimäärä di suurempi kuin nykyinen maksimi, niin

    • nykyinen sivu näyttää nykyisen maksimin,
    • nykyinen sivu näyttää välin " " ,
    • lyhyen orbitaalilistan alkioiksi aset pemetaan lyhyen orbitaalilistan alkiot toisesta alkaen ,
    • lyhyen maksimilistan alkioiksi aset pemetaan lyhyen maksimilistan toisesta alkiot alkaen
    • lalu buat orbitaaleille pienehkö elektronimäärä vähennettynä nykyisellä maksimilla nykyisellä sivulla,
  • ja , jos pienehkö elektronimäärä di 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
  • Anda dapat memesan orbitaaleille mukavan muuttujan arvo nykyisellä sivulla.

Versi online

Terjemahan:

Daftar memiliki item.

Biarkan daftar orbital pendek menjadi daftar baru, itemnya adalah orbital "1s", orbital "2s", orbital "2p", orbital "3s", orbital "3p", orbital "3d", orbital "4s", orbital "4p", orbital "4d", orbital "5s", orbital "5p", orbital "4f", orbital , orbital , the orbital "5d", orbital "6s", orbital "6p", orbital "5f", orbital "6d", orbital "7s" dan orbital "7p".

Biarkan daftar maksimum pendek menjadi daftar baru, itemnya adalah 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 dan 6 .

Ketika sejumlah kecil elektron dibagi ke orbital di halaman saat ini,

  • halaman saat ini menunjukkan orbital saat ini, di mana orbital saat ini adalah item pertama dalam daftar orbital pendek dan maksimum saat ini adalah elemen pertama dalam daftar maksimum pendek,
  • jika sejumlah kecil elektron lebih besar dari maksimum saat ini,
    • halaman saat ini menunjukkan maksimum saat ini,
    • halaman saat ini menunjukkan ruang " ",
    • elemen dari daftar orbital pendek ditetapkan menjadi elemen dari daftar orbital pendek mulai dari yang kedua,
    • elemen daftar maksimum pendek ditetapkan sebagai elemen daftar maksimum pendek mulai dari yang kedua
    • dan sejumlah kecil elektron yang dikurangkan oleh satu dibagi ke orbital di halaman saat ini,
  • dan , jika sejumlah kecil elektron kurang dari atau sama dengan maksimum saat ini,
    • halaman saat ini menunjukkan jumlah kecil atau elektron.

Biarkan variabel yang bagus menjadi variabel baru.

Ketika halaman saat ini terbuka ,

  • angka dibaca ke variabel yang bagus
  • dan nilai variabel bagus dibagi ke orbital di halaman saat ini.

Terjemahan adalah perkiraan, saya harus mengubah urutan kata untuk membuat bahasa Inggris lebih alami.

fergusq
sumber
1
wtf itu bagus ...
FantaC
Tentunya ada bahasa yang lebih tersembunyi yang memiliki semua fitur yang satu ini.
Tidak seorang pun
Bisakah Anda berbaik hati menambahkan terjemahan ke dalam bahasa Inggris sehingga kami dapat memahami bahasa ini?
Zacharý
@ Zacharý saya menambahkannya.
fergusq
6

Python 2 , 129 128 byte

-1 byte terima kasih kepada notjagan

n=input()
d='spdf'.find
s='sspspdspdspfdspfdsp'
i=0
while n>0:c=s[i];t=d(c)*4+2;print`s[:i].count(c)-~d(c)`+c,min(t,n);n-=t;i+=1

Cobalah online!

tongkat
sumber
-1 byte.
notjagan
5

Arang , 72 byte

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

Cobalah online!

Di sini Anda memiliki versi verbose .

Charlie
sumber
4

JavaScript (ES6), 102 byte

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

Uji kasus

Diformat dan dikomentari

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()
Arnauld
sumber
2

Swift , 177 175 156 bytes

Longgar berdasarkan jawaban Javascript @ Arnauld

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

Cobalah online!

Tanpa spasi dalam grup elektron, 190 187 169 byte:

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

Cobalah online!

Herman L.
sumber
1

C (gcc), 260 187 167 156 152 147 143 138 byte

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

Cobalah online! Dikutip dari implementasi referensi.

StackExchange menghapus unsintables, sehingga nilai mdiganti dengan "...".

Berikut ini adalah hexdump reversibel dari program, karena menggunakan unsintables dalam string, yang menggantikan array integer {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}dengan nilai byte literal dari integer.

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

Atau, Anda bisa menyalin kode dari tautan TIO.

MD XF
sumber