Configuración electronica


17

En física atómica y química cuántica , la configuración electrónica es la distribución de electrones de un átomo en orbitales atómicos . Por ejemplo, la configuración electrónica del átomo de neón es 1s 2 2s 2 2p 6 . (De Wikipedia )

Desafío

Su desafío es tomar un número que represente el número atómico de un elemento y generar la configuración electrónica de ese elemento según lo definido por el principio de Aufbau .

El hierro (26) tiene la configuración electrónica . Sin embargo, los superíndices son innecesarios; la salida para 26 debe estar en la línea de .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

Especificación

  • No tiene que manejar ninguna entrada fuera del rango 1 <= n <= 118 .
  • El resultado debe ser algo como los casos de prueba, pero puede utilizar cualquier carácter / caracteres no numéricos (aparte de s, p, d, y f) para delimitar los diferentes orbitales.
  • Debe devolver / imprimir una cadena que contenga los nombres / valores / delmitadores orbitales; no puede simplemente devolver / imprimir una matriz.
  • No necesita manejar ninguna excepción al principio de Aufbau; donde hay excepciones, imprimir la configuración "incorrecta" está bien.

Ejemplos:

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

Aquí hay una lista de todos los orbitales electrónicos. Los valores máximos que pueden contener están debajo del nombre:

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

Casos de prueba

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

Aquí hay una lista completa y una implementación de referenciaPruébelo en línea! )

Condición ganadora

Como se trata de , ¡el código más corto gana!


2
IIRC cada desafío que se ejecuta en un conjunto finito de entradas con una salida constante es un candidato para la etiqueta kolmogorov. Buen desafío
Uriel

66
En los casos de prueba, 3dparece llenarse antes 4s, 4dantes 5s, 6sdespués 4fy 5d, lo que viola la regla de Madelung . ¿Deberíamos utilizar programas de golf que impriman las configuraciones electrónicas incorrectas en el pastebin?
JungHwan Min

55
Además, hay excepciones al principio de Aufbau (como el cromo (atómico no. 24) que tiene en 4s1 3d5lugar de 4s2 3d4). Veo que se preguntó en la publicación de sandbox pero nunca fue respondida. ¿Ignoramos ese problema?
JungHwan Min


Respuestas:


2

Gelatina , 63 62 56 55 bytes

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

Pruébalo en línea!

¡Gracias a user202729 por guardar 6 bytes con descompresión base!

Explicación

Primero construyo la lista [[1,2,2,3,3,3,4,4,4,5,5,4,5,6,6,5,6,7,7],'sspspdspdspfdspfdsp']con el código “ŒµḊuÆẓƙỊ’D,“çƥ÷£ḟ’ṃ“spdf”¤en el segundo enlace.

  • “ŒµḊuÆẓƙỊ’es el número 1223334445545665677comprimido en la base 250.D convierte en una lista de dígitos.
  • “çƥ÷£ḟ’ṃ“spdf”cambia el número de base 250 “çƥ÷£ḟ’a base 4 y lo indexa en la cadena de “spdf”rendimiento 'sspspdspdspfdspfdsp'. Esto fue contribuido por el usuario202729.

La lista se lleva al primer enlace por Ç. El primer enlace hace lo siguiente:

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

Ahora de vuelta al segundo enlace. Con repetimos cada uno de los elementos en cada sublista de [[1,2,2,3...7],['sspspd...p']]por los números en nuestra nueva lista [2,2,6...]. Esto rinde [[1,1,2,2,2,2...],['sssspp...']]. Zcomprime las dos sublistas que rinden [[1,'s'],[1,'s'],[2,'s']...].

Ahora al enlace principal. ¢llama al segundo enlace que produce la lista final de tuplas descrita anteriormente. Suponga que la entrada al programa es 5 como ejemplo.

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

¿Alguna forma de comprimir la sspspdspd...cuerda?
MD XF

@MDXF Lo intenté pero terminó siendo más largo. También probé a construirlo diversas formas y partes individuales eran más cortas, pero en su conjunto fue más largo
dylnan

@dylnan “çƥ÷£ḟ’ṃ“spdf”¤para -6 byte. Usado esto para base 250 entero y para descompresión de base.
user202729

@ user202729 bien, gracias!
dylnan

7

Tampio Imperativo , 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ä en 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ö, 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 yön, missä oma yö on oman ilon ensimmäinenilo ja ujo ilo on ison yön ensimmäinenilo, jos iso luku on suurempi kuin ujo ilo, niin iso ilo näyttää ujon ilon, iso ilo näyttä Ilon" " , Omán Ilon iloiksi asetetaan Omán 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 luku iso en 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ón en línea

Es una implementación muy sencilla. En la versión golfed simplemente sustituye las palabras con palabras cortas como ilo, , iso, oma, etc.

Sin golf:

Listalla en 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 en lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi en lyhyen maksimilistan ensimmäinenalkio,
  • jos pienehkö elektronimäärä en 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ä en 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.

Versión en línea

Traducción:

Una lista tiene artículos.

Deje que la lista orbital corta sea una nueva lista, sus elementos son el orbital "1s", el orbital "2s", el orbital "2p", el orbital "3s", el orbital "3p", el orbital "3d", el orbital "4s", el orbital "4p", el orbital "4d", el orbital "5s", el orbital "5p", el orbital "4f", el orbital "5d", el orbital "6s", el orbital "6p", el orbital "5f", el orbital "6d", el orbital "7s" y el orbital "7p".

Deje que la lista máxima corta sea una nueva lista, sus elementos son 2, 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 y 6 .

Cuando una pequeña cantidad de electrones se divide en los orbitales en la página actual,

  • la página actual muestra el orbital actual, donde el orbital actual es el primer elemento en la lista de orbitales cortas y el máximo actual es el primer elemento en la lista de máximos cortos,
  • si el pequeño número de electrones es mayor que el máximo actual,
    • la página actual muestra el máximo actual,
    • la página actual muestra el espacio " ",
    • los elementos de la lista orbital corta se configuran para ser los elementos de la lista orbital corta comenzando desde el segundo,
    • los elementos de la lista máxima corta se configuran para ser los elementos de la lista máxima corta comenzando desde el segundo
    • y la pequeña cantidad de electrones restados por uno se divide en los orbitales en la página actual,
  • y , si el pequeño número de electrones es menor o igual que el máximo actual,
    • la página actual muestra el pequeño número o electrones.

Deje que la buena variable sea una nueva variable.

Cuando se abre la página actual ,

  • se lee un número en la variable agradable
  • y el valor de la variable agradable se divide a los orbitales en la página actual.

La traducción es aproximada, tuve que cambiar el orden de las palabras para que el inglés fuera más natural.


1
wtf eso es bueno ...
FantaC

Seguramente hay un lenguaje más tácito que tiene todas las características de este.
Nadie

¿Podría ser tan amable de agregar una traducción al inglés para que podamos entender este idioma?
Zacharý

@ Zacharý lo agregué.
fergusq



4

JavaScript (ES6), 102 bytes

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

Casos de prueba

Formateado y comentado

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 bytes

Basada en la respuesta 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}}

Pruébalo en línea!

Sin los espacios en los grupos de electrones, 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}}

Pruébalo en línea!


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

Pruébalo en línea! Golfed desde la implementación de referencia.

StackExchange elimina los no imprimibles, por lo que el valor de mse reemplaza por "...".

Aquí hay un hexdump reversible del programa, ya que utiliza no imprimibles en una cadena, que reemplaza la matriz de enteros {2,2,6,2,6,10,2,6,10,2,6,14,10,2,6,14,10,2,6}con los valores de bytes literales de los enteros.

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

Alternativamente, puede copiar el código del enlace TIO.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.