การกำหนดค่าอิเล็กตรอน


17

ในฟิสิกส์อะตอมและเคมีควอนตัมที่อิเล็กตรอนคือการกระจายของอิเล็กตรอนของอะตอมในปรมาณู orbitals ยกตัวอย่างเช่นการกำหนดค่าอิเล็กตรอนของอะตอมนีออนเป็น1s 2 2s 2 2p 6 (จากWikipedia )

ท้าทาย

ความท้าทายของคุณคือการใช้ตัวเลขแทนเลขอะตอมของธาตุและเอาท์พุทอิเล็กตรอนขององค์ประกอบที่ตามที่กำหนดโดยหลักการ Aufbau

เหล็ก (26) มีการกำหนดค่าอิเล็กตรอน อย่างไรก็ตามตัวยกนั้นไม่จำเป็น เอาท์พุท 26 ควรจะเป็นตามสายของ1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

สเปค

  • คุณไม่ได้มีการจัดการปัจจัยการผลิตใด ๆ 1 <= n <= 118นอกช่วง
  • การส่งออกของคุณควรมีลักษณะบางอย่างเช่นกรณีทดสอบ แต่คุณอาจจะใช้ที่ไม่ใช่หลักตัวอักษรใด ๆ / ตัวอักษร (นอกเหนือจากs, p, dและf) เพื่อกำหนดเขต orbitals ที่แตกต่างกัน
  • คุณต้องส่งคืน / พิมพ์สตริงที่มีชื่อ / ค่า / ผู้ส่งวงโคจร; คุณไม่สามารถคืน / พิมพ์อาร์เรย์ได้
  • คุณไม่จำเป็นต้องจัดการกับข้อยกเว้นใด ๆ กับหลักการ 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ดูเหมือนจะเต็มไปก่อน4s, 4dก่อน5s, 6sหลัง4fและ5dที่ละเมิดกฎลังส์ เราควรโปรแกรมกอล์ฟที่พิมพ์การกำหนดค่าอิเล็กตรอนไม่ถูกต้องบน Pastebin หรือไม่?
JungHwan Min

5
นอกจากนี้ยังมีข้อยกเว้นสำหรับหลักการ Aufbau (เช่น Chromium (หมายเลขอะตอม 24) ที่มี4s1 3d5แทน4s2 3d4) ฉันเห็นว่ามันถูกถามในโพสต์แซนด์บ็อกซ์ แต่ก็ไม่เคยตอบ เราจะเพิกเฉยต่อปัญหานี้หรือไม่?
JungHwan Min

1
OMG ฉันสาบานว่าฉันกำลังจะโพสต์คำถามเดียวกันนี้ ... วันนี้
FantaC

คำตอบ:


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” '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']...]

ตอนนี้ไปที่ลิงก์หลัก ¢เรียกลิงค์ที่สองซึ่งให้ผลลัพธ์รายการสุดท้ายของ tuples ตามที่อธิบายไว้ข้างต้น สมมติว่าอินพุตกับโปรแกรมคือ 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

7

Tampio ที่จำเป็น , 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โย่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 องค์การแรงงานระหว่างประเทศ Olkoon iso yö uusi yö, jonka"7p"iloja ovat 2 , 2, 6, 2, 6, 10, 2, kuin ujo ILO, niin ISO ILO näyttää ujon ilon, ISO ILO näyttää6, 10, 2, 6, 14, 10, 2, 6, 14, 10, ja2 Kun ISO luku Juo ISON ilon, ISO ILO näyttääโอมานยน, มิสสะ OMA YO ในโอมาน ilon ILO ja ujo ILO ใน ISON yön ILO, Jos ISO luku บนsuurempi6ensimmäinenensimmäinen ilon" "โอมาน ilon iloiksi asetetaanโอมาน ilon Ilot toisesta alkaen , ISON yön iloiksi asetetaan ISON yön Ilot toisesta alkaen ja ISO luku vähennettynä iso sivu avautuu , omaan muuttujaan luetaan luku jaujolla ilolla juo ison ilon ja , jos iso luku บน pienempi tai yhtä suuri kuin ujo ilo, niin iso ilo näyttää ison luvun Olkoon oma muuttuja uusi muuttuja kun oman muuttujan arvo juo ison sivun

เวอร์ชั่นออนไลน์

เป็นการใช้งานที่ง่ายมาก ในรุ่นแข็งแรงเล่นกอล์ฟที่ฉันเพียงแค่เปลี่ยนคำพูดด้วยคำพูดสั้น ๆ เช่นilo, , iso, omaฯลฯ

Ungolfed:

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"

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, ja2 6

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

  • nykyinen sivu näyttää nykyisen orbitaalin, missä nykyinen orbitaali บน lyhyen ensimmäinenorbitaalilistan alkio ja nykyinen maksimi บน lyhyen ensimmäinenmaksimilistan alkio,
  • jos pienehköelektronimäärä บน 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ä บน pienempi tai 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 luku
  • ja jaetaan orbitaaleille mukavan muuttujan arvo nykyisellä 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
  • และค่าของตัวแปรที่ดีจะถูกแบ่งออกเป็นวงโคจรที่หน้าปัจจุบัน

การแปลนั้นโดยประมาณฉันต้องเปลี่ยนคำสั่งเพื่อทำให้ภาษาอังกฤษเป็นธรรมชาติยิ่งขึ้น


1
wtf เป็นสิ่งที่ดี ...
แฟนต้า

แน่นอนว่ามีภาษาที่เงียบกว่าซึ่งมีคุณสมบัติทั้งหมดของอันนี้
ไม่มีใคร

คุณสามารถเพิ่มการแปลเป็นภาษาอังกฤษเพื่อที่เราจะสามารถเข้าใจภาษานี้ได้หรือไม่?
Zacharý

@ Zacharýฉันเพิ่ม
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

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

ลองออนไลน์!Golfed จากการใช้งานอ้างอิง

StackExchange ลบ unprintables ดังนั้นค่าของmจะถูกแทนที่ด้วย"..."จะถูกแทนที่ด้วย

นี่คือ hexdump ที่สามารถย้อนกลับได้ของโปรแกรมเนื่องจากมันใช้ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.