전자 구성


17

에서는 원자 물리학양자 화학전자 구성 의 분포 전자원자원자 궤도는 . 예를 들어, 네온 원자의 전자 배열은 1s 2 2s 2 2p 6 입니다. ( 위키 백과에서 )

도전

당신의 도전은 원소 의 원자 번호 를 나타내는 숫자를 취하고 Aufbau 원리에 의해 정의 된대로 그 원소의 전자 구성을 출력하는 입니다.

철 (26)은 전자 배열을 갖는다 . 그러나 위첨자는 불필요합니다. 26의 출력은의 라인을 따라야합니다 .1s2 2s2 2p6 3s2 3p6 3d6 4s21s2 2s2 2p6 3s2 3p6 3d6 4s2

사양

  • 범위를 벗어난 입력은 처리 할 필요가 없습니다 1 <= n <= 118.
  • 귀하의 출력은 테스트 케이스처럼 보일 것이다, 그러나 당신은 제외하고 (모든 숫자가 아닌 문자 / 문자를 사용할 수 있습니다 s,p , d, 및 f다른 궤도를 구분하는).
  • 궤도 이름 / 값 / 델 미터가 포함 된 문자열을 반환 / 인쇄해야합니다. 단순히 배열을 반환 / 인쇄 할 수 없습니다.
  • 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, 4d5s, 6s4f5d위반하는 격자의 Madelung 규칙을 . 페이스트 빈에 잘못된 전자 구성을 인쇄하는 프로그램을 골라야합니까?
JungHwan Min

5
또한 Aufbau 원칙에는 예외가 있습니다 (예 : Chromium (원자 번호 24) 4s1 3d5대신 4s2 3d4). 샌드 박스 게시물에 요청되었지만 응답되지 않은 것으로 보입니다. 우리는 그 문제를 무시합니까?
JungHwan Min

1
OMG 나는 똑같은 질문을 게시 할 것이라고 맹세합니다. 오늘
FantaC

1
@Uriel 상태 완료
MD XF

답변:


2

젤리 , 63 62 56 55 바이트

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

온라인으로 사용해보십시오!

기본 압축 해제로 6 바이트를 절약 한 user202729에게 감사합니다!

설명

먼저 두 번째 링크 [[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']...].

이제 메인 링크로갑니다. ¢위에서 설명한 튜플의 최종 목록을 생성하는 두 번째 링크를 호출합니다. 프로그램에 대한 입력이 예를 들어 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

“çƥ÷£ḟ’ṃ“spdf”¤-6 바이트의 경우 @dylnan . 사용 기본 250 정수과 기본 압축 해제.
user202729

@ 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ä 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ö, 존카 일로 하 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 iilo 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 ela näyttääy ilon" "오만 ilon iloiksi asetetaan 오만 ilon ILOT toisesta alkaen , ISON 저곳 iloiksi asetetaan ISON 저곳 ILOT toisesta alkaen JA ISO luku vähennettynä ujolla ilolla juo ISON ilon JA , 조스 이소 luku pienempi의 타이 yhtä suuri kuin 우조 ILO, NIIN ISO ILO näyttää ISON luvun. Olkoon oma muuttuja uusi muuttuja. Kun iso sivu avautuu , omaan muuttujaan luetaan luku JA오만 muuttujan arvo juo ison sivun .

온라인 버전

매우 간단한 구현입니다. golfed 버전에서는 단순히 좋아하는 짧은 단어와 단어 교체 ilo, , iso, oma, 등

언 골프 드 :

alkiot Listalla.

Olkoon lyhyt orbitaalilista uusi 중고 장비 구매, 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 중고 장비 구매, 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 nnyyisäny nykyisen orbitaalin, missny nykyinen orbitaali on lyhyen orbitaalilistan ensimmäinenalkio ja nykyinen maksimi on lyhyen 막시 ensimmäinen밀리 스탄 알키 오,
  • 호세 pienehkö elektronimäärä suurempi kuin nykyinen maksimi, NIIN

    • nykyinen sivu nnyyttää nykyisen maksimin,
    • nykyinen sivu näyttää välin " " ,
    • lyhyen orbitaalilistan alkioiksi asetetaan lyhyen orbitaalilistan 알키 오트 알카 toisesta ,
    • lyhyen maksimilistan alkio asetetaan lyhyen maksimilistan alkiot 알카 toisesta
    • ja jaetaan orbitaaleille pienehkö elektronimäärr vähennettynä nykyisellä maksimilla nykyisellä sivulla,
  • ja , jos pienehkö elektronimäärä 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 ,

  • 무 카바 투자 안 루에 타안 루쿠
  • 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

자바 스크립트 (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의 Javascript 답변을 기반으로 느슨하게

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로 대체됩니다 "...".

다음은 프로그램에서 뒤집을 수있는 16 진수 덤프입니다. 문자열에서 인쇄 할 수없는 {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.