เคมี 101 - ความรู้เบื้องต้นเกี่ยวกับตารางธาตุ


24

คำถาม

Given the atomic number of an elementในช่วง [1-118] เอาต์พุตgroup and period, ขององค์ประกอบนั้นตามที่กำหนดโดยตารางธาตุต่อไปนี้

สำหรับองค์ประกอบในซีรี่ส์ Lanthanide และ Actinide (ช่วง [57-71] และ [89-103]) คุณควรกลับไปLหา Lanthanides และAActinides แทน

คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและใช้วิธีการมาตรฐานของเราในการรับอินพุตและให้เอาต์พุต

คุณอาจใช้ภาษาการเขียนโปรแกรมใด ๆแต่โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น

ป้อนคำอธิบายรูปภาพที่นี่

[ที่มา]

กรณีทดสอบ

เนื่องจากมีอินพุตที่เป็นไปได้เพียง 118 รายการรายการทั้งหมดของอินพุตและเอาต์พุตที่คาดหวังจึงเป็นรายการด้านล่าง

สร้างด้วยมือแจ้งให้เราทราบหากมีข้อผิดพลาด!

1,1,1
2,18,1
3,1,2
4,2,2
5,13,2
6,14,2
7,15,2
8,16,2
9,17,2
10,18,2
11,1,3
12,2,3
13,13,3
14,14,3
15,15,3
16,16,3
17,17,3
18,18,3
19,1,4
20,2,4
21,3,4
22,4,4
23,5,4
24,6,4
25,7,4
26,8,4
27,9,4
28,10,4
29,11,4
30,12,4
31,13,4
32,14,4
33,15,4
34,16,4
35,17,4
36,18,4
37,1,5
38,2,5
39,3,5
40,4,5
41,5,5
42,6,5
43,7,5
44,8,5
45,9,5
46,10,5
47,11,5
48,12,5
49,13,5
50,14,5
51,15,5
52,16,5
53,17,5
54,18,5
55,1,6
56,2,6
57, L,
58, L,
59, L,
60, L,
61, L,
62, L,
63, L,
64, L,
65, L,
66, L,
67, L,
68, L,
69, L,
70, L,
71, L,
72,4,6
73,5,6
74,6,6
75,7,6
76,8,6
77,9,6
78,10,6
79,11,6
80,12,6
81,13,6
82,14,6
83,15,6
84,16,6
85,17,6
86,18,6
87,1,7
88,2,7
89, A,
90, A,
91, A,
92, A,
93, A,
94, A,
95, A,
96, A,
97, A,
98, A,
99, A,
100, A,
101, A,
102, A,
103, A,
104,4,7
105,5,7
106,6,7
107,7,7
108,8,7
109,9,7
110,10,7
111,11,7
112,12,7
113,13,7
114,14,7
115,15,7
116,16,7
117,17,7
118,18,7

เกณฑ์การให้คะแนน

ง่ายรหัสกอล์ฟจำนวนไบต์ที่สั้นที่สุดชนะ


5
ฉันเพิ่งรู้ว่า Mathematica จะมีอุปกรณ์ในตัวสำหรับ ...
Okx

@Okx, ฉันหวังว่า lanthanides และ actinides เลอะใด ๆ ที่สร้างขึ้นอิน :)
เจมส์เว็บสเตอร์

2
คุณได้รับอนุญาตให้ส่งคืน "6, L" และ "7, A" สำหรับ Lanthanides และ Actinides หรือไม่
Neil

1
ไม่สามารถแสดงความคิดเห็น (แต่) แต่บางครั้งไฮโดรเจนถูกวางไว้ในกลุ่ม 17 - แต่ฉันรับทราบว่าคุณใช้รูปภาพเพื่อแสดงเหตุผลว่าทำไมกลุ่มที่ 1 และไม่รู้ว่าสิ่งนี้ทำให้ยากหรือง่ายขึ้นหรือไม่
sjb-2812

1
Lไม่เป็นไร นั่นคือสิ่งที่ฉันตั้งใจจริง แต่ตั้งแต่ CSV ออกมาL,ฉันจะยอมรับทั้งสอง
James Webster

คำตอบ:


10

CJam , 64 59 58 56 54 ไบต์

ขอบคุณเดนนิสที่ช่วยประหยัด 2 ไบต์

{_80-zG-z8<{80>"LA"=}{_"X8"f>[-14_AAGH].*+:+Imd)}?}

ลองออนไลน์!

ปล่อยรอบระยะเวลาและกลุ่มหรืออักขระเดียวบนสแต็ก

คำอธิบาย

มีสองแนวคิดหลักที่นี่:

  • อันดับแรกเราจัดการกับ Lanthanides และ Actinides เรามีเงื่อนไข56 <x <72สำหรับ Lanthanides และ88 <x <104สำหรับ Actinides ทั้งสองสิ่งนี้สามารถแสดงเป็นการเปรียบเทียบเพียงครั้งเดียวโดยนำความแตกต่างที่แท้จริงไปยังศูนย์กลางของช่วง: ความไม่เท่าเทียมกันกลายเป็น| x - 64 | <8และ| x - 96 | <8ตามลำดับ แต่สิ่งเหล่านี้ยังคงคล้ายกันมากและการเปรียบเทียบสองแบบแยกกันมีราคาแพง ดังนั้นเราจึงใช้แนวคิดเดียวกันนี้ในการตรวจสอบช่วงสมมาตรโดยรับความแตกต่างแบบสัมบูรณ์กับจุดศูนย์กลางระหว่างสองช่วงคือ80ช่วงแรก: | | x-80 | - 16 | <8. เงื่อนไขนี้บ่งชี้ว่าอะตอมเป็น Lanthanide หรือ Actinide แต่การแยกความแตกต่างระหว่างสองกรณีนี้นั้นเล็กน้อยเมื่อเทียบกับ 80 (หรือค่าอื่น ๆ ระหว่างช่วง)
  • เนื่องจากผลลัพธ์เป็นดัชนีในตารางที่มีความกว้าง 18 วิธีที่ชัดเจนคือพยายามแปลงค่าเป็นฐาน 18 เพื่อให้ตัวเลขสองหลักให้กลุ่มและจุด ในการทำเช่นนั้นเราต้องเปลี่ยนค่าบางค่า สิ่งที่เราต้องทำทั้งหมดคือการเพิ่มช่องว่างในช่วงเวลา 1, 2 และ 3 และปิดช่องว่างในช่วงเวลา 6 และ 7 มันง่ายที่สุดในการทำเช่นนี้ตั้งแต่ต้นจนจบค่าของช่องว่างอื่น ๆ จะไม่ได้รับผลกระทบ (และเก็บค่าของพวกเขา)

_            e# Make a copy of the input, to figure out whether the output
             e# should be L or A.
80-z         e# Absolute difference from 80.
G-z          e# Absolute difference from 16.
8<           e# Check whether the result is less than 8.
{            e# If so...
  80>        e#   Check whether the input is greater than 80.
  "LA"=      e#   Select 'L or 'A accordingly.
}{           e# ...otherwise...
  _          e#   Duplicate input again.
  "X8"    e#   Push a string with character codes [88 56 12 4 1].
             e#   These are the values just before the gaps.
  f>         e#   Compare the input to each of these.
  [-14_AAGH] e#   Push [-14 -14 10 10 16 17]. These are the changes we need to
             e#   make to remove or insert the gaps corresponding to the above
             e#   positions. Note that the 17 doesn't get paired with an offset.
             e#   It's a constant offset to itself, which is equivalent to
             e#   decrementing the input (to make it zero based) and adding 18
             e#   to make the increment the period and make it 1-based.
  .*         e#   Multiply each gap by whether it's before the input value.
  +:+        e#   Add all of the applicable gaps to the input value.
  Imd        e#   Divmod 18, gives 1-based period and 0-based group.
  )          e#   Increment the group to make it one-based.
}?

9

05AB1E , 113 102 99 ไบต์

X18©XY‚Dˆ13®Ÿ¯13®Ÿ®LD¯15'L×S15L3+©¯15'A×S®)˜¹<è,XXY8×SD>4 18×SD>S66Sð14×S6 15×S77Sð15×S7 15×S)˜¹<è,

คำอธิบาย:

(start to construct the period part)
X18 ~ push 1 and 18
© ~ store 18 in register_c without p-opping
XY ~ push 1 and 2
13® ~ push 13 and the top element in register_c (18)
Ÿ ~ range - pop 2 values and push [a .. b]
XY ~ push 1 and 2
13®Ÿ ~ range - 13 to 18
XY ~ push 1, 2
13®Ÿ ~ range - 13 to 18
®LD ~ range - 1 to 18 (twice)
2L ~ range - 1 to 2
15'L×S ~ push 'L' 15 times
15L ~ range - 1 to 15
3+ ~ add 3 to each value in topmost element in stack
© ~ store in register-c without popping
2L ~ range - 1 to 2
15'A×S ~ push 'A' 15 times
® ~ push topmost value in register_c
) ~ wrap stack to array
˜ ~ deep flatten
¹<è ~ 1-indexed value of input in array
, ~ print & pop
(start to construct the group part)
XX ~ push 1 twice
Y8×SD ~ push 2 eight times (twice)
> ~ increment each value by 1
4 18×S ~ push 4 eighteen times (twice)
> ~ increment each value by one
66S ~ push 6 twice
ð15×S ~ push a space character 15 times
6 15×S ~ push 6 fifteen times
77S ~ push 7 two times
ð15×S ~ push a space character 15 times
7 15×S ~ push 7 fifteen times
)˜ ~ wrap stack to array and deep flatten
¹<è, ~ get 1-indexed value of input in array, then pop & print

ลองออนไลน์!


การใช้มาสก์เช่น1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111อาจลดจำนวนโดยรวมดีมาก!
Magic Octopus Urn

7

Mathematica, 77 ไบต์

e=ElementData;Which[56<#<72,"L",88<#<104,"A",1>0,{#~e~"Group",#~e~"Period"}]&

มันจะค่อนข้างใช้งานง่ายเพื่อElementDataตรวจสอบว่าอินพุตเป็น Lanthanide หรือ Actinide แต่จะใช้เวลาประมาณ 20 ไบต์ขึ้นไป


3
อย่างจริงจัง builtins อีกครั้ง?
Matthew Roh

1
@ MatthewthRoh ฉันแน่ใจว่าวิธีแก้ปัญหาทางคณิตศาสตร์ที่ตีกอล์ฟได้ดีในภาษากอล์ฟจะสามารถเอาชนะสิ่งนี้ได้อย่างง่ายดาย
Martin Ender

@ มาร์ตินเอนเดอร์ฉันแน่ใจจริง ๆ ของตรงกันข้าม
Erik the Outgolfer

@EriktheOutgolfer เอาล่ะคุณไปแล้ว ฉันแน่ใจว่าเยลลี่สามารถลดได้อีก 30-50%
Martin Ender

@ มาร์ตินเอนเดอร์ฉันน่าจะทิ้งเดนนิสไว้มากที่สุดฉันไม่สามารถทำสิ่งนี้ได้ในช่วงเวลาสอบ
Erik the Outgolfer


3

PHP, 144 ไบต์

หมายเหตุ: ใช้การเข้ารหัส IBM-850

$x=($a=$argn-1)<57|$a>70?$a>88&$a<103?A:0:L;foreach([16,19=>10,37=>10,92=>-14,110=>-14]as$l=>$m)$a>$l&&$a+=$m;echo$x?:$a%18+1 .~Ë.ceil(++$a/18);

ทำงานแบบนี้:

echo 118 | php -nR '$x=($a=$argn-1)<57|$a>70?$a>88&$a<103?A:0:L;foreach([16,19=>10,37=>10,92=>-14,110=>-14]as$l=>$m)$a>$l&&$a+=$m;echo$x?:$a%18+1 .~Ë.ceil(++$a/18);';echo
> 18,7

คำอธิบาย

ตรวจสอบว่าอินพุตอยู่ในช่วงสำหรับLหรือA; ช่วง "ยกเว้น" จากนั้นแก้ไขอินพุตเพื่อเติมเซลล์ที่หายไปในตาราง (หรือกำจัดเซลล์พิเศษ) ในที่สุดพิมพ์ข้อยกเว้น (เว้นแต่ว่าจะเป็นเท็จ0) หรือแปลงตำแหน่งเป็นพิกัดกริด


18<t7เล่นตัวอย่างของการส่งออกที่ผมได้รับคือ นี่เป็นสิ่งที่ฉันทำผิดหรือเปล่า? (ทำงานบน Mac El Capitan)
James Webster

1
@JamesWebster นั่นเป็นเพราะการเข้ารหัสที่ฉันใช้สำหรับเครื่องหมายจุลภาค หากคุณไม่สามารถสลับการเข้ารหัสเทอร์มินัลของคุณคุณสามารถแทนที่สิ่งระหว่าง 2 จุด (ก่อนหน้านี้ceil) ด้วย "," สำหรับ 1 ไบต์พิเศษ
aross

3

เยลลี่ , 57ไบต์

“9Ḳ*!}ḣE’ṃ“¢£Æ¥Ø‘r2/;€"“ⱮḶıð’ḃ7¤µ⁵,12Ṭœṗ;"⁾LAṁ€15¤j“”$⁺³ị

โปรแกรมเต็มรูปแบบที่พิมพ์เอาท์พุทที่ต้องการ

ลองออนไลน์! (โปรแกรมแก้ไขเล็กน้อยที่พิมพ์ทั้งหมดinput : outputอาจจะเห็นที่นี่ )

อย่างไร?

สร้างรายการ 118 เอาต์พุตที่เป็นไปได้จากนั้นเลือกรายการที่ดัชนีของอินพุต

เตรียมบาง:

“9Ḳ*!}ḣE’ - base 250 number: 14334152882934570 (call this A)

“¢£Æ¥Ø‘   - a list using Jelly's code page: [1, 2, 13, 4, 18] (call this B)

“ⱮḶıð’    - base 250 number: 2354944025 (call this C)

โปรแกรม (สั้นลงโดยการแทนA, BและC):

AṃBr2/;€"Cḃ7¤µ⁵,12Ṭœṗ;"⁾LAṁ€15¤j“”$⁺³ị - Main link: atomicNumber
AṃB                                    - number A with digits B: [1,1,18,18,1,2,13,18,1,2,13,18,1,18,1,18,1,2,4,18,1,2,4,18]
    2/                                 - pair-wise reduce with
   r                                   -     inclusive range: [[1],[18],[1,2],[13,14,15,16,17,18],[1,2],[13,14,15,16,17,18],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[1,2],[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[1,2],[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]]
            ¤                          - nilad followed by link(s) as a nilad:
         C                             -     number C
          ḃ7                           -     converted to bijective base 7: [1,1,2,2,3,3,4,5,6,6,7,7]
        "                              - zip with:
      ,€                               -     pair each: [[1,1],[18,1],[[1,2],[2,2]],[[13,2],[14,2],[15,2],[16,2],[17,2],[18,2]],[[1,3],[2,3]],[[13,3],[14,3],[15,3],[16,3],[17,3],[18,3]],[[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4],[12,4],[13,4],[14,4],[15,4],[16,4],[17,4],[18,4]],[[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],[9,5],[10,5],[11,5],[12,5],[13,5],[14,5],[15,5],[16,5],[17,5],[18,5]],[[1,6],[2,6]],[[4,6],[5,6],[6,6],[7,6],[8,6],[9,6],[10,6],[11,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[18,6]],[[1,7],[2,7]],[[4,7],[5,7],[6,7],[7,7],[8,7],[9,7],[10,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7]]]
             µ                         - monadic chain separation (call the result x)
              ⁵                        - 10
               ,12                     - pair with 12: [10,12]            10↓ 12↓
                  Ṭ                    - truthy indexes: [0,0,0,0,0,0,0,0,0,1,0,1]
                   œṗ                  - partition x at the truthy indexes 
                                       -     (the locations of the runs of L's and A's)
                              ¤        - nilad followed by link(s) as a nilad:

                       ⁾LA             -     ['L','A']
                          ṁ€15         -     mould each like 15: [['L','L','L','L','L','L','L','L','L','L','L','L','L','L','L'],['A','A','A','A','A','A','A','A','A','A','A','A','A','A','A']]
                      "                - zip with:
                     ;                 -     concatenation: [[[1,1],[18,1],[[1,2],[2,2]],[[13,2],[14,2],[15,2],[16,2],[17,2],[18,2]],[[1,3],[2,3]],[[13,3],[14,3],[15,3],[16,3],[17,3],[18,3]],[[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4],[12,4],[13,4],[14,4],[15,4],[16,4],[17,4],[18,4]],[[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],[9,5],[10,5],[11,5],[12,5],[13,5],[14,5],[15,5],[16,5],[17,5],[18,5]],[[1,6],[2,6]],'L','L','L','L','L','L','L','L','L','L','L','L','L','L','L'],[[[4,6],[5,6],[6,6],[7,6],[8,6],[9,6],[10,6],[11,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[18,6]],[[1,7],[2,7]],'A','A','A','A','A','A','A','A','A','A','A','A','A','A','A'],[[4,7],[5,7],[6,7],[7,7],[8,7],[9,7],[10,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7]]]

             µ⁵,12Ṭœṗ;"⁾LAṁ€15¤j“”$⁺³ị
                                  $    - last two links as a monad:
                               j“”     -     join with [''] (a workaround for no "flatten by 1")
                                   ⁺   - repeat last link (flatten once more): [[1,1],[18,1],[1,2],[2,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[1,3],[2,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4],[12,4],[13,4],[14,4],[15,4],[16,4],[17,4],[18,4],[1,5],[2,5],[3,5],[4,5],[5,5],[6,5],[7,5],[8,5],[9,5],[10,5],[11,5],[12,5],[13,5],[14,5],[15,5],[16,5],[17,5],[18,5],[1,6],[2,6],'L','L','L','L','L','L','L','L','L','L','L','L','L','L','L',[4,6],[5,6],[6,6],[7,6],[8,6],[9,6],[10,6],[11,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[18,6],[1,7],[2,7],'A','A','A','A','A','A','A','A','A','A','A','A','A','A','A',[4,7],[5,7],[6,7],[7,7],[8,7],[9,7],[10,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7]]
                                    ³  - program's first input
                                     ị - index into the list

2

Perl5, 202 ไบต์

$x=substr(" !2ABMNOPQRabmnopqr\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\301\302LLLLLLLLLLLLLLL\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\341\342KKKKKKKKKKKKKKK\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362",$ARGV[0],1);print$x=~/K/?"A":$x=~/L/?$x:(ord($x)&31).",".(ord($x)>>5)

ฉันขอแนะนำให้ย่อส่วนของสตริง '\ 201 \ 202 \ 203 \ ... \ 362' อย่างจริงจังตราบใดที่มันห่า
Matthew Roh

1
อยากรู้ว่า @MatthewRoh วัด heck ได้อย่างไร
hBy2Py

2

ทับทิมขนาด 130 ไบต์

->a{(w=32767)[a-57]>0??L:w[a-89]>0??A:([[1,2],[20,8],[38,8],[107,32],[125,32]].map{|x,y|a>x&&a+=18-y};[(b=a%18)>0?b:18,~-a/18+1])}

ขั้นแรกให้ได้ 'A' และ 'L' ด้วยเคล็ดลับ bitmask จากนั้นลองใส่ในสี่เหลี่ยมขนาด 18 * 7 แล้วใช้ div / mod



2

Python 2 , 115 ไบต์

def f(n):n+=([0,17]+[33]*3+[43]*8+[53]*45+[200]*14+[39]*18+[400]*14+[25]*15)[n];print[(n%18+1,n/18),'L','A'][n/200]

ลองออนไลน์!

แนวคิดคือการดัดแปลงตำแหน่งกริดเพื่อให้ได้กลุ่มและจุด ตำแหน่งกริดคืออินพุตที่nปรับโดยการกระจัดเพื่อบัญชีสำหรับช่องว่างและการหด L / A สิ่งเหล่านี้ถูกแยกออกจากรายการ

การจัดการ Lanthanide และ Actinide นั้นน่าเกลียด สิ่งเหล่านี้จะถูกกำหนดเป็น displacements ขนาดใหญ่ 200 และ 400 ที่สามารถตรวจพบ/200ได้ ฉันต้องการใส่ตัวอักษรLและAที่นี่ แต่จากนั้นn+=...จะเพิ่มอักขระลงในหมายเลขทำให้เกิดข้อผิดพลาดแม้ว่าnจะไม่ได้ใช้ หากไม่ใช่สำหรับการจัดทำดัชนี 1 divmodสามารถใช้เพื่ออ้างถึงnเพียงครั้งเดียวและจากนั้นจะสามารถแทนที่ด้วยนิพจน์ของมัน


2

JavaScript (ES7), 100 98 ไบต์

f=(n,p=1,x=0,y=x+2*(p+2>>1)**2)=>(n-57&95)<15?n>71?'A':'L':n>y?f(n,p+1,y):[n-x-1>p/2?n-y+18:n-x,p]
<input type=number min=1 max=118 oninput=o.textContent=f(this.value)><pre id=o>

คำอธิบาย: ซีรีส์ 'L' และ 'A' นั้นเป็นกรณีพิเศษโดยใช้ตรรกะระดับบิตที่ช่วยให้ฉัน 3 ไบต์ผ่านการเปรียบเทียบโดยตรง มิฉะนั้นฟังก์ชันจะค้นหาจุดpที่มีหมายเลขอะตอมซ้ำจำนวนขององค์ประกอบสุดท้ายในช่วงก่อนหน้าxและจำนวนขององค์ประกอบสุดท้ายในช่วงเวลาyที่คำนวณได้ในแต่ละครั้งโดยสังเกตว่าความแตกต่างคือ 2, 2, 8 , 8, 18, 18 คือถูกทำซ้ำเป็นสองเท่าของจำนวนตาราง กลุ่มนั้นจะถูกค้นพบโดยการชดเชยจากทางซ้ายหรือขวาของตารางขึ้นอยู่กับว่าองค์ประกอบอยู่ภายใต้เส้นทแยงมุมเบริลเลียม - สแกนเดียมหรือไม่


1

JavaScript (ES6), 136 ไบต์

n=>[...'112626ii2ff2fff'].reduce((p,i,j)=>(n-=parseInt(i,36))>0?n:+p?+(x='112233456L67A7'[j])?[p+(9258>>j&1?j>5?3:j>2?12:17:0),x]:x:p,n)

ทดสอบ


1

Python 2 , 264 227 217 ไบต์

lambda x:((((((((((((((1,1),(18,1))[x>1],(x-2,2))[x>2],(x+8,2))[x>4],(x-10,3))[x>10],(x,3))[x>12],(x-18,4))[x>18],(x-36,5))[x>36],(x-54,6))[x>54],'L')[x>56],(x-68,6))[x>71],(x-86,7))[x>86],'A')[x>88],(x-100,7))[x>103]

ลองออนไลน์!

ทางวงเล็บมากเกินไป ดูเหมือน Brain-Flak มากขึ้น


คุณไม่สามารถวางสิ่งที่whileอยู่นอกฟังก์ชั่น? มันจะประหยัดไบต์ (พื้นที่)
เฟลิ Nardi บาติสตา

@FelipeNardiBatista - การจัดการเพื่อกำจัดwhileห่วงทั้งหมด :)
ElPedro

1

Excel, 192 ไบต์

ไกลจากความสวย การยืมจากคำตอบของ Python ที่มีอยู่

=SUBSTITUTE(SUBSTITUTE(IF(ABS(ABS(A1-80)-16)<8,IF(A1<80,"L","A"),MOD(A1-2*(A1>1)-8*(A1>4)-8*(A1>12)+4*((A1>71)+(A1>99)),18)&" ,"&1+(A1>2)+(A1>10)+(A1>18)+(A1>36)+(A1>54)+(A1>86)),0,18),118,10)

ดิ้นรนเพื่อจัดการกรณีที่MOD(x,18)=0สำหรับค่ากลุ่มอย่างสง่างาม


ฉันคิดว่าฉันพบข้อผิดพลาด IF สำหรับการพิจารณา lanthanides และ actinides ควรอ่านด้วยIF(A1<80หรือไม่
James Webster

@ JamesWebster เห็นดี ได้มีการแก้ไข
Wernisch

0

Ruby, 116 ไบต์

->n{a=(17..143).map{|i|"#{[i%18+1,i/18]}"}
a[2..17]=a[21..30]=a[39..48]=[]
a[57]=[?L]*15
a[75]=[?A]*15
a.flatten[n]}

แสดงความคิดเห็นในโปรแกรมทดสอบ

f=->n{
a=(17..143).map{|i|"#{[i%18+1,i/18]}"} #Make an array with strings "[18,0]" to "[18,7]" (first value required as input is 1 indexed.)
a[2..17]=a[21..30]=a[39..48]=[]        #Delete "missing" elements from first three periods. 
a[57]=[?L]*15                          #Replace position 57 in the table with a 15-element array ["L".."L"]
a[75]=[?A]*15                          #Replace the correct position in the table with a 15-element array ["A".."A"]
a.flatten[n]}                          #Flatten the array (break the two above elements into 15) and output element n of the array.

1.upto(118){|n|print n,f[n],$/}

0

PHP, 120 ไบต์

echo(($n=--$argn)-56&95)<15?LA[$n>70]:(($n-=14*($n>88)+14*($n>56)-10*($n>11)-10*($n>3)-16*!!$n)%18+1).",".(($n/18|0)+1);

ใช้เวลาการป้อนข้อมูลจาก STDIN, -nRทำงานกับ

บางมายากลค่าที่เหมาะสมสำหรับ lanthanides และแอกทิไนด์, ส่วนเพิ่มและลบชดเชยสำหรับช่องว่างและ lanthanides / แอกทิไนด์,
$n-=
ส่วนที่เหลือเป็นเรื่องง่าย mod / div

พอร์ตซ้ำของคำตอบของNeilใช้เวลา108 ไบต์ :

for(;(95&71+$n=$argn)>14&&$n>$y+=2*(++$p+2>>1)**2;)$x=$y;
echo$p?$n-$x>$p/2+1?$n-$y+18:$n-$x:LA[$n>70],",$p";

0

Perl, 169 ไบต์

90>($n-=14)&&($g=A)if($n=$v=pop)>88;58>($n-=14)&&($g=L)if$n>56;if(!$g){$c+=vec"\1\0\xe\xc0?\0".("\xff"x9)."?",$i++,1
while$c<$n;$p=1+($i-($g=$i%18||18))/18}say"$v,$g,$p"

โดยใช้:

perl -E '90>($n-=14)&&($g=A)if($n=$v=pop)>88;58>($n-=14)&&($g=L)if$n>56;if(!$g){$c+=vec"\1\0\xe\xc0?\0".("\xff"x9)."?",$i++,1 while$c<$n;$p=1+($i-($g=$i%18||18))/18}say"$v,$g,$p"' 103

0

เยลลี่ , 49 43 42 41 39 ไบต์

45“ÞØ\€a€⁶;l;i‘bx/€F’ḣ¹Sḃ18µV=“?I‘⁾LAxȯ

ลองออนไลน์!

พื้นหลัง

ด้วยข้อยกเว้นของ lanthanides และ actinides ผลลัพธ์จะประกอบด้วยจำนวนเต็มที่แสดงในฐาน bijective 18 ตัวอย่างเช่นไฮโดรเจนสอดคล้องกับ19 10 = 11 b18ฮีเลียมถึง36 10 = 1I b18และ eka-radon / ununoctium / oganesson ถึง114 10 = 7I b18 b18

เราเริ่มต้นด้วยการจับคู่หมายเลขอะตอมทั้งหมดที่เราสามารถทำได้กับจำนวนเต็มที่สอดคล้องกันในขณะที่จับคู่แลนทานัมและแอกทิไนด์กับเลขแลนทานัม ( 111 10 = 63 b18) ) และแอกติเนียม ( 129 10 = 73 b18 )

ในการทำเช่นนี้เราจะบันทึกความแตกต่างของจำนวนเต็มที่เป็นตัวแทนของอะตอม ยกตัวอย่างเช่นตัวแรกคือ1I b18 - 11 b18 = H b18 = 17 10ที่สองคือ1 (ตามความแตกต่างทั้งหมดระหว่างองค์ประกอบที่ต่อเนื่องกันของตารางธาตุที่ยังไม่ขยาย) ส่วนที่สี่ ( BถึงBe ) คือ2D b18 - 22 b18 = B b18 = 11 10และอื่น ๆ ในการแมป lanthanides ทั้งหมดและแอคติไนด์ทั้งหมดเราจะพิจารณาความแตกต่างทั้งหมดระหว่าง lanthanides ทั้งสองหรือแอคติไนด์ (เช่นLaถึงCe ) เป็น0 0

ในการรับจำนวนเต็มที่ต้องการสำหรับเลขอะตอมnสิ่งที่เราต้องทำคือเติม19 (ไฮโดรเจน) เพื่อความแตกต่างและคำนวณผลรวมขององค์ประกอบnแรกของเวกเตอร์ที่ได้ เอาต์พุตจะถูกแสดงในฐาน bijective 18 เว้นแต่ว่าจะแสดง6 3 (lanthanides) หรือ7 3 (actinides) ในกรณีหลังเราเพียงแทนที่ผลลัพธ์ที่คำนวณด้วยLหรือA

ห่อเพื่อความมีชีวิตชีวาในแนวนอนเวกเตอร์ที่เราต้องเข้ารหัสมีลักษณะดังนี้

19 17  1  1 11  1  1  1  1  1  1  1 11  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  1  1  1
 1  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1
 1  1  1  1  1  1

หลังจากการเข้ารหัสรันไทม์เราได้รับดังต่อไปนี้

19 1    17 1    1 2    11 1    1 7    11 1    1 44    0 14    1 18    0 14    1 15

เพื่อลดพื้นที่ที่ต้องใช้ในการเข้ารหัสเวกเตอร์ให้มากขึ้นเราจึงตัดแถบขวาสุด1 (ความยาว) และเพิ่ม1ลงในการวิ่ง

20      18      2 2    12      2 7    12      2 44    1 14    2 18    1 14    2 15

ตอนนี้เราสามารถแปลงอาร์เรย์ตัวเลขเหล่านี้กลับจากฐาน 45 เป็นจำนวนเต็มได้

20      18      92     12      97     12      134     59      108     59      105

ทั้งหมดเหล่านี้มีขนาดเล็กกว่า250เพื่อให้เราสามารถเป็นตัวแทนของพวกเขาด้วยตัวละครจากหน้ารหัสของวุ้น ล้อมรอบด้วย(เริ่มต้นตัวอักษร) และ (ตีความเป็นอาร์เรย์จำนวนเต็ม) เราจะได้รับตัวอักษรเยลลี่

“ÞØ\€a€⁶;l;i‘

ซึ่งจะปรากฏคำต่อคำในรหัส

มันทำงานอย่างไร

45“…‘bx/€F’ḣ¹Sḃ18µV=“?I‘⁾LAxȯ  Main link. Argument: n (atomic number)

45                             Set the return value to 45.
  “…‘                          Yield [20,18,92,12,97,12,134,59,108,59,105].
     b                         Convert the integers in the array to base 45.
      x/€                      Reduce each resulting digit array (length 1 or 2)
                               by repetition, mapping [z] -> [z] and
                               [y,z] -> [y,…,y] (z times).
         F                     Flatten the result.
          ’                    Decrement, yielding the vector of length 118 from
                               the previous section.
           ḣ¹                  Head; take the first n elements of the vector.
             S                 Compute their sum.
              ḃ18              Convert to bijective base 18, yielding [p, g].
                 µ             Begin a new chain with argument [p,g].
                  V            Eval. The atom casts to string first, so [6,3]
                               , e.g., is mapped to 63, [7,18] to 718, etc.
                   =“?I‘       Compare the result with [63,73], yielding
                               [1,0] for lanthanides, [0,1] for actinides, and
                               [0,0] otherwise.
                        ⁾LAx   Repeat 'L' and 'A' that many times, yielding "L" for
                               lanthanides, "A" for actinides, and "" otherwise.
                            ȯ  Flat logical OR; replace "" with [p,g].

ในขณะที่นี่เป็นคำตอบที่น่าสนใจฉันกลัวว่ามันจะตกอยู่กับผลลัพธ์ แทนที่จะเอาท์พุทกลุ่มและช่วงเวลาสำหรับอินพุตก็จะปรากฏขึ้นเพื่อส่งออกหมายเลขอะตอมกลุ่มและระยะเวลาสำหรับตารางเต็ม ลองพิจารณาว่าฉันจะขอคำจำกัดความจากพจนานุกรมของคำหรือไม่และคุณเพิ่งแสดงพจนานุกรม
James Webster

ส่วนท้ายให้ชุดทดสอบเพื่อการตรวจสอบที่ง่าย หากคุณลบออกและให้ข้อมูลเป็นอาร์กิวเมนต์มันจะพิมพ์ข้อมูลที่สเป็คถาม tio.run/nexus/jelly#@29i@qhhzuF5h2fEPGpakwjEjxq3WedYZz5qmJFUoQ/ …
Dennis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.