Configuration électronique

17

En physique atomique et en chimie quantique , la configuration électronique est la distribution des électrons d'un atome dans les orbitales atomiques . Par exemple, la configuration électronique de l'atome de néon est 1s 2 2s 2 2p 6 . (De Wikipedia )

Défi

Votre défi est de prendre un nombre représentant le numéro atomique d'un élément et de sortir la configuration électronique de cet élément telle que définie par le principe d'Aufbau .

Le fer (26) a la configuration électronique . Cependant, les exposants ne sont pas nécessaires; la sortie pour 26 devrait être dans le sens de .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

spécification

  • Vous ne devez gérer aucune entrée en dehors de la plage 1 <= n <= 118.
  • Votre sortie doit ressembler à quelque chose comme les cas de test, mais vous pouvez utiliser des caractères non-chiffres / caractères ( à part s, p, det f) pour délimiter les différentes orbitales.
  • Vous devez renvoyer / imprimer une chaîne contenant les noms / valeurs / délimiteurs orbitaux; vous ne pouvez pas simplement retourner / imprimer un tableau.
  • Vous n'avez pas besoin de gérer d'exceptions au principe Aufbau; là où il y a des exceptions, l'impression de la configuration "incorrecte" est correcte.

Exemples:

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

Voici une liste de toutes les orbitales électroniques. Les valeurs maximales qu'ils peuvent contenir sont inférieures au nom:

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

Cas de test

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

Voici une liste complète et une sorte d' implémentation de référence ( Essayez-le en ligne! )

Condition gagnante

Comme il s'agit de , le code le plus court gagne!

MD XF
la source
2
L'IIRC chaque défi qui s'exécute sur un ensemble fini d'entrées avec une sortie constante est un candidat pour la balise kolmogorov. Beau défi.
Uriel
6
Dans les cas de test, 3dsemble être rempli avant 4s, 4davant 5s, 6saprès 4fet 5d, qui violent la règle Madelung . Faut-il des programmes de golf qui impriment les configurations d'électrons incorrectes sur la boîte à pâte?
JungHwan Min
5
En outre, il existe des exceptions au principe Aufbau (comme le chrome (atomique n ° 24) ayant 4s1 3d5 au lieu de 4s2 3d4). Je vois que cela a été demandé dans le post sandbox mais n'a jamais été répondu. Ignorons-nous ce problème?
JungHwan Min
1
OMG Je jure que j'allais poster exactement la même question ... aujourd'hui
FantaC
1
@Uriel status-completed
MD XF

Réponses:

2

Gelée , 63 62 56 55 octets

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

Essayez-le en ligne!

Merci à user202729 pour avoir économisé 6 octets avec la décompression de base!

Explication

Je construis d'abord la liste [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']avec le code “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤dans le deuxième lien.

  • “ŒµḊuÆẓƙỊ’ est le nombre 1223334445545665677 compressé en base 250. Ddonne transforme cela en une liste de chiffres.
  • “çƥ÷£ḟ’ṃ“spdf”change le nombre de base 250 “çƥ÷£ḟ’en base 4 et l'indexe dans la chaîne“spdf” donnant 'sspspdspdspfdspfdsp'. Cela a été fourni par user202729.

La liste est ensuite prise au premier lien par Ç . Le premier lien fait ce qui suit:

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

Revenons maintenant au deuxième lien. Avec nous répétons chacun des éléments de chaque sous-liste [[1,2,2,3...7],['sspspd...p']]par les numéros de notre nouvelle liste [2,2,6...]. Cela donne[[1,1,2,2,2,2...],['sssspp...']] . Zzippe les deux sous-listes qui cèdent [[1,'s'],[1,'s'],[2,'s']...].

Passons maintenant au lien principal. ¢appelle le deuxième lien qui donne la liste finale des tuples décrite ci-dessus. Supposons que l'entrée du programme soit 5 à titre d'exemple.

¢ḣŒ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
la source
Une façon de compresser la sspspdspd...chaîne?
MD XF
@MDXF J'ai essayé mais ça a fini par être plus long. J'ai également essayé de le construire de différentes manières et les pièces individuelles étaient plus courtes mais dans l'ensemble, elles étaient plus longues
dylnan
@dylnan “çƥ÷£ḟ’ṃ“spdf”¤pour -6 octets. Utilisé ce pour entier à base de 250 et pour la décompression base.
user202729
@ user202729 sympa, merci!
dylnan
7

Tampio impératif , 930 octets

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ä sur 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" , oit "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ö sur oman ilon ensimmäinenilo ja ujo ilo sur ison yön ensimmäinenilo, jos iso luku sur suurempi kuin ujo ilo, niin iso ilo näyttää ujon ilon, iso ilo näyttääilon , oman ilon iloiksi asetetaan oman ilon ilot alkaen " "toisesta , ison yön iloiksi asetetaan ison yön ilot À toisesta partir ja iso luku vähennettynä ujolla ilolla juo ison ilon ja , jos iso luku sur 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.

Version en ligne

Il s'agit d'une implémentation très simple. Dans la version golfed je simplement remplacé les mots avec des mots courts comme ilo, , iso, oma, etc.

Non golfé:

Listalla sur 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 sur lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi sur lyhyen maksimilistan ensimmäinenalkio,
  • jos pienehkö elektronimäärä sur 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 partir de ,
    • lyhyen maksimilistan alkioiksi asetetaan lyhyen maksimilistan alkiot À toisesta partir de
    • ja jaetaan orbitaaleille pienehkö elektronimäärä vähennettynä nykyisellä maksimilla nykyisellä sivulla,
  • ja , jos pienehkö elektronimäärä sur 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.

Version en ligne

Traduction:

Une liste contient des éléments.

Que la courte liste orbitale soit une nouvelle liste, ses éléments sont l'orbitale "1s", l'orbitale "2s", l'orbitale "2p", l'orbitale "3s", l'orbitale "3p", l'orbitale "3d", l'orbitale "4s", l'orbitale "4p", l'orbitale "4d", l'orbitale "5s", l'orbitale "5p", l'orbitale "4f", la orbital "5d", l'orbitale "6s", l'orbitale "6p", l'orbitale "5f", l'orbitale "6d", l'orbitale "7s" et l'orbitale "7p".

Que la courte liste maximale soit une nouvelle liste, ses éléments sont 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 et 6 .

Lorsqu'un petit nombre d'électrons est divisé vers les orbitales de la page actuelle,

  • la page actuelle montre l'orbite actuelle, l'orbite actuelle est le premier élément de la courte liste orbitale et le maximum actuel est le premier élément de la courte liste maximale,
  • si le petit nombre d'électrons est supérieur à au maximum actuel,
    • la page actuelle montre le maximum actuel,
    • la page actuelle montre l'espace" " ,
    • les éléments de la courte liste orbitale sont définis comme étant les éléments de la courte liste orbitale à partir de la seconde,
    • les éléments de la liste maximale courte sont définis comme étant les éléments de la liste maximale courte à partir de la seconde
    • et le petit nombre d'électrons soustraits par un est divisé en orbitales à la page courante,
  • et , si le petit nombre d'électrons est inférieur ou égal à maximum actuel,
    • la page actuelle montre le petit nombre ou les électrons.

Que la belle variable soit une nouvelle variable.

Lorsque la page actuelle s'ouvre ,

  • un nombre est lu dans la belle variable
  • et la valeur de la variable nice est divisée en orbitales sur la page actuelle.

La traduction est approximative, j'ai dû changer l'ordre des mots pour rendre l'anglais plus naturel.

fergusq
la source
1
wtf c'est bon ...
FantaC
Il y a sûrement un langage plus tacite qui a toutes les caractéristiques de celui-ci.
Personne
Pourriez-vous avoir la gentillesse d'ajouter une traduction en anglais afin que nous puissions comprendre cette langue?
Zacharý
@ Zacharý je l'ai ajouté.
fergusq
6

Python 2 , 129 128 octets

-1 octet grâce à 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

Essayez-le en ligne!

Barre
la source
-1 octet.
notjagan
5

Fusain , 72 octets

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

Essayez-le en ligne!

Voici la version détaillée .

Charlie
la source
4

JavaScript (ES6), 102 octets

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

Cas de test

Formaté et commenté

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
la source
2

Swift , 177 175 156 octets

Librement basé sur la réponse Javascript de @ 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}}

Essayez-le en ligne!

Sans les espaces dans les groupes d'électrons, 190 187 169 octets:

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

Essayez-le en ligne!

Herman L
la source
1

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

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

Essayez-le en ligne!Golfé depuis l'implémentation de référence.

StackExchange supprime les non imprimables, donc la valeur de mest remplacée par"..." .

Voici un hexdump réversible du programme, car il utilise des caractères non imprimables dans une chaîne, qui remplace le tableau d'entiers {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}par les valeurs d'octets littéraux des entiers.

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

Alternativement, vous pouvez simplement copier le code à partir du lien TIO.

MD XF
la source