Elektronenkonfiguration

17

In der Atomphysik und der Quantenchemie ist die Elektronenkonfiguration die Verteilung der Elektronen eines Atoms in Atomorbitalen . Beispielsweise beträgt die Elektronenkonfiguration des Neonatoms 1s 2 2s 2 2p 6 . (Aus Wikipedia )

Herausforderung

Ihre Herausforderung besteht darin, eine Zahl zu nehmen, die die Ordnungszahl eines Elements darstellt, und die Elektronenkonfiguration dieses Elements gemäß dem Aufbau-Prinzip auszugeben .

Eisen (26) hat die Elektronenkonfiguration . Hochgestellte Zeichen sind jedoch nicht erforderlich. Die Ausgabe für 26 sollte nach dem Vorbild von sein1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2 .

Spezifikation

  • Sie müssen keine Eingaben außerhalb des Bereichs verarbeiten 1 <= n <= 118 .
  • Die Ausgabe so etwas wie die Testfälle aussehen sollte, aber Sie können alle nicht-stellige Zeichen / Zeichen verwendet werden (abgesehen von s, p, dundf ) , um die verschiedenen Orbitalen zu begrenzen.
  • Sie müssen eine Zeichenfolge mit den Namen / Werten / Delmitern der Umlaufbahn zurückgeben / drucken. Sie können ein Array nicht einfach zurückgeben / drucken.
  • Sie müssen keine Ausnahmen vom Aufbau-Prinzip behandeln. In Ausnahmefällen ist das Drucken der "falschen" Konfiguration in Ordnung.

Beispiele:

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

Hier ist eine Liste aller elektronischen Orbitale. Die Maximalwerte, die sie enthalten können, befinden sich unter dem Namen:

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

Testfälle

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

Hier ist eine vollständige Liste und eine Art Referenzimplementierung ( Online ausprobieren! )

Gewinnbedingung

Da dies , gewinnt der kürzeste Code!

MD XF
quelle
2
IIRC Jede Herausforderung, die auf einer endlichen Menge von Eingaben mit einer konstanten Ausgabe ausgeführt wird, ist ein Kandidat für das Kolmogorov-Tag. Schöne Herausforderung.
Uriel
6
In den Testfällen 3dscheint vor 4s, 4dvor 5s, 6snach 4fund gefüllt zu sein 5d, was die Madelung-Regel verletzt . Sollten wir Golfprogramme spielen, die die falschen Elektronenkonfigurationen auf den Pastebin drucken?
JungHwan Min
5
Auch gibt es Ausnahmen zum Aufbauprinzip (wie Chrom (Ordnungszahl 24) 4s1 3d5anstelle von 4s2 3d4). Ich sehe, dass es in der Sandbox gefragt wurde, aber nie beantwortet wurde. Ignorieren wir dieses Problem?
JungHwan Min
1
OMG Ich schwöre, ich würde genau diese Frage
posten
1
@Uriel Status abgeschlossen
MD XF

Antworten:

2

Jelly , 63 62 56 55 Bytes

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

Probieren Sie es online!

Vielen Dank an user202729 für das Speichern von 6 Bytes bei der Basisdekomprimierung!

Erläuterung

Zuerst [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']erstelle ich die Liste mit dem Code “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤im zweiten Link.

  • “ŒµḊuÆẓƙỊ’ist die Zahl, die 1223334445545665677in die Basis 250 komprimiert ist.D ergibt eine Liste von Ziffern.
  • “çƥ÷£ḟ’ṃ“spdf”ändert die Zahl der Basis 250 “çƥ÷£ḟ’in die Basis 4 und indiziert sie in die Zeichenfolge, die “spdf”ergibt 'sspspdspdspfdspfdsp'. Dies wurde von user202729 beigesteuert.

Die Liste wird dann zum ersten Link von genommen Ç. Der erste Link bewirkt Folgendes:

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

Nun zurück zum zweiten Link. Mit wiederholen wir jedes der Elemente in jeder Unterliste [[1,2,2,3...7],['sspspd...p']]durch die Nummern in unserer neuen Liste [2,2,6...]. Dies ergibt [[1,1,2,2,2,2...],['sssspp...']]. ZZippt die zwei Unterlisten, die ergeben[[1,'s'],[1,'s'],[2,'s']...] .

Nun zum Hauptlink. ¢ruft den zweiten Link auf, der die endgültige Liste der oben beschriebenen Tupel ergibt. Angenommen, die Eingabe für das Programm ist 5 als Beispiel.

¢ḣŒ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
quelle
Wie kann man die sspspdspd...Zeichenfolge komprimieren ?
MD XF
@ MDXF Ich habe versucht, aber es endete länger. Ich habe auch versucht, es auf verschiedene Arten zu konstruieren und einzelne Teile waren kürzer, aber insgesamt war es länger
dylnan
@dylnan “çƥ÷£ḟ’ṃ“spdf”¤für -6 Byte. Verwendet diese für die Basis 250 integer und für die Basis - Dekompression.
user202729
@ user202729 nett, danke!
Dylnan
7

Imperativ Tampio , 930 Bytes

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ä auf 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 , , , , , , , , , , ja ."6d" , ilo "7s"ja ilo"7p" . , , , , , , ,Olkoon iso yö uusi yö, jonka iloja ovat 226261026102614102614102 6Kun iso luku juo ison ilon, iso ilo näyttää oman yön, Missä oma yö auf oman ilon ensimmäinenilo ja ujo ilo auf ison yön ensimmäinenilo, jos iso luku auf suurempi kuin ujo ilo, niin iso ilo näyttää ujon ilon, iso ilo näyttää ilon" " , oman ilon iloiksi asetetaan oman ilon ilot toisesta Ab , ison yön iloiksi asetetaan ison yön ilot toisesta Ab ja iso luku vähennettynä ujolla ilolla juo ison ilon ja , Jos iso luku auf 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.

Online Version

Es ist eine sehr einfache Implementierung. In der golfed Version ersetzt ich einfach die Worte , mit kurzen Worten wie ilo, , iso, omaetc.

Ungolfed:

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

    • nykyinen sivu näyttää nykyisen maksimin,
    • nykyinen sivu näyttää välin " " ,
    • lyhyen orbitaalilistan alkioiksi asetetaan lyhyen orbitaalilistan alkiottoisesta alkaen ,
    • lyhyen maksimilistan alkioiksi asetetaan lyhyen maksimilistan alkiottoisesta alkaen
    • ja jaetaan orbitaaleille pienehkö elektronimäärä vähennettynä nykyisellä maksimilla nykyisellä sivulla,
  • ja , jos pienehkö elektronimäärä on 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.

Online Version

Übersetzung:

Eine Liste enthält Elemente.

Lassen Sie die kurze Orbital Liste sein eine neue Liste, seine Produkte sind die Orbital "1s", das Orbital "2s", das Orbital "2p", das Orbital "3s", das Orbital "3p", das Orbital "3d", das Orbital "4s", das Orbital "4p", das Orbital "4d", das Orbital "5s", das Orbital "5p", das Orbital "4f", die Umlaufbahn "5d", die Umlaufbahn "6s", die Umlaufbahn "6p", die Umlaufbahn "5f", die Umlaufbahn "6d", die Umlaufbahn "7s" und die Umlaufbahn "7p".

Lassen Sie die kurze Maximalliste sein eine neue Liste, seine Produkte sind 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 und 6 .

Wenn eine kleine Anzahl von Elektronen auf die Orbitale auf der aktuellen Seite aufgeteilt wird,

  • die aktuelle Seite zeigt die aktuellen Orbital, wo die aktuellen Orbital ist das erste Element in der kurzen Orbitalliste und das aktuelle Maximum ist das erste Element in der kurzen Maximalliste,
  • wenn die kleine Anzahl der Elektronen größer ist als das aktuelle Maximum ist,
    • Die aktuelle Seite zeigt das aktuelle Maximum,
    • Die aktuelle Seite zeigt das Leerzeichen" " ,
    • Die Elemente der Kurzorbitalliste werden so festgelegt, dass sie die Elemente der Kurzorbitalliste sind, beginnend mit der zweiten.
    • Die Elemente der Short-Maximum-Liste werden ab der zweiten als die Elemente der Short-Maximum-Liste festgelegt
    • und die kleine Anzahl von Elektronen, die um eins subtrahiert werden , wird in die Orbitale auf der aktuellen Seite aufgeteilt,
  • und , wenn die kleine Zahl von Elektronen ist kleiner als oder gleich der aktuellen maximalen,
    • Die aktuelle Seite zeigt die kleine Anzahl von Elektronen.

Lassen Sie die schöne Variable sein eine neue Variable.

Wenn die aktuelle Seite geöffnet wird ,

  • In die nette Variable wird eine Zahl eingelesen
  • und der Wert der netten Variablen wird auf die Orbitale der aktuellen Seite aufgeteilt.

Die Übersetzung ist ungefähr, ich musste die Wortreihenfolge ändern, um das Englisch natürlicher zu machen.

fergusq
quelle
1
wtf das ist gut ...
FantaC
Sicherlich gibt es eine stillschweigendere Sprache, die alle Merkmale dieser Sprache aufweist.
Niemand
Könnten Sie eine Übersetzung ins Englische hinzufügen, damit wir diese Sprache verstehen können?
Zacharý
@ Zacharý Ich habe es hinzugefügt.
Fergusq
6

Python 2 , 129 128 Bytes

-1 byte dank 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

Probieren Sie es online!

Stange
quelle
-1 Byte.
Notjagan
5

Kohle , 72 Bytes

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

Probieren Sie es online!

Hier haben Sie die ausführliche Version .

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

Testfälle

Formatiert und kommentiert

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
quelle
2

Swift , 177 175 156 Bytes

Locker basierend auf der Javascript-Antwort von @ 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}}

Probieren Sie es online!

Ohne die Leerzeichen in den Elektronengruppen 190 187 169 Bytes:

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

Probieren Sie es online!

Herman L
quelle
1

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

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

Probieren Sie es online! Golf von der Referenzimplementierung.

StackExchange entfernt nicht druckbare Elemente, sodass der Wert von mdurch ersetzt wird"..." .

Hier ist ein umkehrbarer Hexdump des Programms, da in einer Zeichenfolge nicht druckbare Elemente verwendet werden, die das Ganzzahl-Array {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}durch die Literal-Byte-Werte der Ganzzahlen ersetzen .

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

Alternativ können Sie den Code auch einfach vom TIO-Link kopieren.

MD XF
quelle