Cấu hình điện tử


17

Trong vật lý nguyên tửhóa học lượng tử , cấu hình electron là sự phân bố electron của nguyên tử theo quỹ đạo nguyên tử . Ví dụ, cấu hình electron của nguyên tử neon là 1s 2 2s 2 2p 6 . (Từ Wikipedia )

Thử thách

Thách thức của bạn là lấy một số đại diện cho số nguyên tử của một nguyên tố và đưa ra cấu hình electron của nguyên tố đó theo định nghĩa của nguyên tắc Aufbau .

Sắt (26) có cấu hình electron . Tuy nhiên, siêu ký tự là không cần thiết; đầu ra cho 26 phải dọc theo dòng .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

Sự chỉ rõ

  • Bạn không phải xử lý bất kỳ đầu vào nào ngoài phạm vi 1 <= n <= 118.
  • Đầu ra của bạn sẽ giống như các trường hợp kiểm tra, nhưng bạn có thể sử dụng bất kỳ phi chữ số nhân vật / nhân vật (ngoài s, p, d, và f) để phân định các quỹ đạo khác nhau.
  • Bạn phải trả về / in một chuỗi chứa tên / giá trị / ký hiệu quỹ đạo; bạn không thể đơn giản trả về / in một mảng.
  • Bạn không cần phải xử lý bất kỳ trường hợp ngoại lệ nào đối với nguyên tắc Aufbau; trong trường hợp có ngoại lệ, in cấu hình "không chính xác" là tốt.

Ví dụ:

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

Dưới đây là danh sách tất cả các quỹ đạo điện tử. Các giá trị tối đa họ có thể chứa nằm bên dưới tên:

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

Các trường hợp thử nghiệm

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

Dưới đây là một danh sách đầy đủ và một triển khai tham khảo các loại ( Hãy thử trực tuyến! )

Điều kiện chiến thắng

Vì đây là , mã ngắn nhất sẽ thắng!


2
IIRC mọi thách thức chạy trên một tập hợp đầu vào hữu hạn với đầu ra không đổi là một ứng cử viên cho thẻ kolmogorov. Thử thách đẹp.
Uriel

6
Trong các trường hợp thử nghiệm, 3ddường như được điền trước 4s, 4dtrước 5s, 6ssau 4f5d, vi phạm quy tắc Madelung . Chúng ta có nên các chương trình golf in cấu hình electron không chính xác trên pastebin?
JungHwan Min

5
Ngoài ra, có những trường hợp ngoại lệ đối với nguyên tắc Aufbau (như Chromium (nguyên tử số 24) có 4s1 3d5thay thế 4s2 3d4). Tôi thấy rằng nó đã được hỏi trong bài sandbox nhưng không bao giờ được trả lời. Chúng ta bỏ qua vấn đề đó?
JungHwan Min

1
OMG Tôi thề tôi sẽ đăng chính xác câu hỏi này ... hôm nay
FantaC

Câu trả lời:


2

Thạch , 63 62 56 55 byte

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

Hãy thử trực tuyến!

Cảm ơn user202729 vì đã lưu 6 byte với giải nén cơ sở!

Giải trình

Đầu tiên tôi xây dựng danh sách [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']với mã “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤trong liên kết thứ hai.

  • “ŒµḊuÆẓƙỊ’là số được 1223334445545665677nén vào cơ sở 250. Dcho phép biến số này thành một danh sách các chữ số.
  • “çƥ÷£ḟ’ṃ“spdf”thay đổi số cơ sở 250 “çƥ÷£ḟ’thành cơ sở 4 và lập chỉ mục cho chuỗi “spdf”năng suất 'sspspdspdspfdspfdsp'. Điều này đã được đóng góp bởi người dùng202729.

Danh sách này sau đó được đưa đến liên kết nắm tay bởi Ç. Liên kết đầu tiên thực hiện như sau:

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

Bây giờ trở lại liên kết thứ hai. Với chúng tôi lặp lại từng yếu tố trong mỗi danh sách con của [[1,2,2,3...7],['sspspd...p']]các số trong danh sách mới của chúng tôi [2,2,6...]. Sản lượng này [[1,1,2,2,2,2...],['sssspp...']]. Zzips hai danh sách con mà sản lượng [[1,'s'],[1,'s'],[2,'s']...].

Bây giờ đến liên kết chính. ¢gọi liên kết thứ hai mang lại danh sách các bộ dữ liệu được mô tả ở trên. Giả sử đầu vào của chương trình là 5 làm ví dụ.

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

Bất kỳ cách nào để nén sspspdspd...chuỗi?
MD XF

@MDXF Tôi đã thử nhưng cuối cùng nó vẫn dài hơn. Tôi cũng đã cố gắng xây dựng nó theo nhiều cách khác nhau và các phần riêng lẻ ngắn hơn nhưng về tổng thể thì nó dài hơn
dylnan 22/12/17

@dylnan “çƥ÷£ḟ’ṃ“spdf”¤cho -6 byte. Đã sử dụng điều này cho số nguyên cơ sở 250 và giải nén cơ sở.
dùng202729

@ user202729 tốt đẹp, cảm ơn bạn!
dyl Nam

7

Băng tải bắt buộc , 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ä trên 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 yo uusi yo, 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 Yon, Missa oma yo trên oman Ilon ensimmäinenilo ja ujo ilo trên Ison Yon ensimmäinenilo, jos iso luku trên 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 trên 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.

Phiên bản trực tuyến

Đó là một thực hiện rất đơn giản. Trong phiên bản golfed Tôi chỉ đơn giản là thay thế các từ với các từ ngắn thích ilo, , iso, omavv

Ung dung:

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

    • nykyinen sivu näyttää nykyisen maksimin,
    • nykyinen sivu näyttää välin " " ,
    • 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ä trên 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.

Phiên bản trực tuyến

Dịch:

Một danh sách các mục.

Hãy để danh sách quỹ đạo ngắn một danh sách mới, các mục của nó quỹ đạo "1s", quỹ đạo "2s", quỹ đạo "2p", quỹ đạo "3s", quỹ đạo "3p", quỹ đạo "3d", quỹ đạo "4s", quỹ đạo "4p", quỹ đạo "4d", quỹ đạo "5s", quỹ đạo "5p", quỹ đạo "4f", quỹ đạo , quỹ đạo , quỹ đạo , quỹ đạo quỹ đạo "5d", quỹ đạo "6s", quỹ đạo "6p", quỹ đạo "5f", quỹ đạo "6d", quỹ đạo "7s" quỹ đạo "7p".

Đặt danh sách tối đa ngắn một danh sách mới, các mục của nó 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 và 6 .

Khi một số lượng nhỏ điện tử được chia cho các quỹ đạo ở trang hiện tại,

  • trang hiện tại hiển thị quỹ đạo hiện tại, trong đó quỹ đạo hiện tại mục đầu tiên trong danh sách quỹ đạo ngắn tối đa hiện tại yếu tố đầu tiên trong danh sách tối đa ngắn,
  • nếu số lượng điện tử nhỏ hơn mức tối đa hiện tại,
    • trang hiện tại hiển thị mức tối đa hiện tại,
    • trang hiện tại hiển thị không gian " ",
    • các yếu tố của danh sách quỹ đạo ngắn được đặt thành các yếu tố của danh sách quỹ đạo ngắn bắt đầu từ thứ hai,
    • các yếu tố của danh sách tối đa ngắn được đặt thành các yếu tố của danh sách tối đa ngắn bắt đầu từ thứ hai
    • số lượng nhỏ các electron bị trừ bởi một được chia cho các quỹ đạo ở trang hiện tại,
  • , nếu số lượng điện tử nhỏ hơn hoặc bằng mức tối đa hiện tại,
    • trang hiện tại hiển thị số lượng nhỏ hoặc điện tử.

Hãy để biến tốt đẹp một biến mới.

Khi trang hiện tại mở ra ,

  • một số được đọc cho biến tốt
  • giá trị của biến đẹp được chia cho các quỹ đạo tại trang hiện tại.

Bản dịch là gần đúng, tôi đã phải thay đổi thứ tự từ để làm cho tiếng Anh tự nhiên hơn.


1
wtf thật tốt ...
FantaC

Chắc chắn có một ngôn ngữ ngầm hơn có tất cả các tính năng của ngôn ngữ này.
Không ai

Bạn có thể tử tế khi thêm một bản dịch sang tiếng Anh để chúng tôi có thể hiểu ngôn ngữ này?
Zacharý

@ Zacharý Tôi đã thêm nó.
fergusq



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

Các trường hợp thử nghiệm

Định dạng và nhận xét

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 byte

Dựa vào câu trả lời Javascript của @ 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}}

Hãy thử trực tuyến!

Không có khoảng trắng trong các nhóm electron, 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}}

Hãy thử trực tuyến!


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

Hãy thử trực tuyến! Đánh gôn từ việc thực hiện tham khảo.

StackExchange loại bỏ không thể in được, vì vậy giá trị của mđược thay thế bằng "...".

Đây là một hexdump có thể đảo ngược của chương trình, vì nó sử dụng unprintables trong một chuỗi, thay thế mảng số nguyên {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}bằng các giá trị byte bằng chữ của các số nguyên.

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

Ngoài ra, bạn chỉ có thể sao chép mã từ liên kết TIO.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.