Конфігурація електронів


17

В атомній фізиці і квантової хімії , то електронна конфігурація є розподіл електронів в якості атома в атомних орбіталей . Наприклад, конфігурація електронів неонового атома дорівнює 1s 2 2s 2 2p 6 . Вікіпедії )

Виклик

Ваша задача полягає в тому, щоб взяти число, що представляє атомний номер елемента, і вивести електронну конфігурацію цього елемента, як визначено принципом Ауфбау .

Залізо (26) має електронну конфігурацію . Однак надписи зайві; вихід для 26 повинен бути уздовж рядків .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

Специфікація

  • Вам не доведеться обробляти будь-які входи поза межами діапазону 1 <= n <= 118.
  • Ваш результат повинен виглядати як в тестових прикладах, але ви можете використовувати будь-які нецифрові символи / символи (крім s, p, dі f) , щоб розмежувати різні орбіталі.
  • Ви повинні повернути / надрукувати рядок, що містить орбітальні імена / значення / роздільники; ви не можете просто повернути / роздрукувати масив.
  • Вам не потрібно обробляти будь-які винятки з принципу Ауфбау; там, де є винятки, друк «неправильної» конфігурації чудово.

Приклади:

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 кожен виклик, який працює на кінцевому наборі входів з постійним виходом, є кандидатом на тег колгорогоров. Приємний виклик.
Уріель

6
У тестових випадках, 3dздається, заповнюються до 4s, 4dдо 5s, 6sпісля 4fі 5d, які порушують правило Маделунга . Чи повинні ми гольф-програми, які друкують неправильні конфігурації електронів на пастібіні?
JungHwan Min

5
Також є винятки з принципу Ауфбау (наприклад, Хром (атомний № 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'. Цьому сприяв користувач202729.

Потім список переходить на кулак посилання Ç. Перше посилання робить наступне:

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

Тепер до основної ланки. ¢називає друге посилання, яке дає остаточний перелік кортежів, описаний вище. Припустимо, як приклад вхід до програми - 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 цілого числа і для базової декомпресії.
користувач202729

@ user202729 приємно, дякую!
dylnan

7

Імператив Тампіо , 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ä на ілоті. Olkoon OMA мот Уусі YO, Jonka iloja ovat марнотрат"1s" , марнотрат"2s" , марнотрат"2p" , марнотрат"3s" , марнотрат"3p" , марнотрат"3d" , марнотрат"4s" , марнотрат"4p" , марнотрат"4d" , марнотрат"5s" , марнотрат"5p" , марнотрат"4f" , марнотрат"5d" , марнотрат"6s" , марнотрат"6p" , марнотрат"5f" , марнотрат"6d" , марнотрат "7s"JA мот"7p" . Olkoon з YO Уусі YO, Jonkailoja ovat 2 , 2, 6, 2, 6, 10, 2, 6, 10, 2, 6, 14, 10, 2, 6, 14, 10, 2 JA 6 . Kun з Luku juo ісоном гончар, з мот näyttää Омані Йон, Missä OMA YO на Омані та логотипи ensimmäinenмот JA Ujo мот на ісоном Йон ensimmäinenмарнотрат, Jos з LUKU на suurempi Куїн Ujo марнотрат, Niin з мот näyttää ujon гончар, з мот näyttää гончар" " , Оман та логотипи iloiksi asetetaan Оман та логотипи Ilot toisesta alkaen , ісон Йон iloiksi asetetaan ісон Йон Ilot toisesta alkaen JA з Luku vähennettynä ujolla ilolla juo ісон логотипи JA , Jos з Luku на pienempi тай yhtä Suuri Куїн Ujo Іло, Niin з марнотрати näyttää ісон luvun. Olkoon oma muuttuja uusi muuttuja. Kun iso sivu avautuu , omaan muuttujaan luetaan luku jaoman muuttujan arvo juo ison sivun.

Інтернет-версія

Це дуже просто реалізація. У golfed версії я просто замінити слова з короткими словами подобається ilo, , iso, omaі т.д.

Безумовно:

Листалла на акіоті.

Olkoon lyhyt orbitaalilista Уусі 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 Уусі 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 on lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi on lyhyen maksimilistan ensimmäinenalkio,
  • Jos pienehkö elektronimäärä на suurempi Куїн 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ä на pienempi тай yhtä Suuri Куїн 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.

Інтернет-версія

Переклад:

У списку є елементи.

Нехай короткий орбітальний список буде новий список, його елементи є орбітальними "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 .

Коли невелика кількість електронів ділиться на орбіталі на поточній сторінці,

  • на поточній сторінці відображається поточна орбіталь, де поточна орбіталь є першим елементом у короткому орбітальному списку, а поточний максимум є першим елементом у короткому максимальному списку,
  • якщо мала кількість електронів більша за максимум струму,
    • поточна сторінка показує поточний максимум,
    • поточна сторінка показує пробіл " ",
    • елементи короткого орбітального списку встановлюються як елементи короткого орбітального списку, починаючи з другого,
    • елементи короткого максимального списку встановлюються як елементи короткого максимального списку, починаючи з другого
    • і невелика кількість електронів, віднятих одним , ділиться на орбіталі на поточній сторінці,
  • і , якщо мала кількість електронів менше або дорівнює поточному максимуму,
    • на поточній сторінці показано невелику кількість або електрони.

Нехай приємна змінна буде новою змінною.

Коли відкриється поточна сторінка ,

  • число читається приємній змінній
  • а значення приємної змінної ділиться на орбіталі на поточній сторінці.

Переклад приблизний, мені довелося змінити порядок слів, щоб зробити англійську більш природною.


1
wtf це добре ...
FantaC

Звичайно, є більш мовчазна мова, яка має всі риси цієї.
Ніхто

Чи можете ви бути настільки добрими, щоб додати переклад англійською мовою, щоб ми могли зрозуміти цю мову?
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 байт

Loosly заснований на відповіді Javascript @ 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++));}

Спробуйте в Інтернеті! Гольф від еталонної реалізації.

StackExchange видаляє недруковані файли, тому значення mзамінено на "...".

Ось оборотний гекс-дамп програми, оскільки він використовує 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.