化学101-元素周期表简介


24

Given the atomic number of an element在[1-118]范围内,输出group and period元素的,如下面的元素周期表所示。

对于镧系和Act系元素系列(范围[57-71]和[89-103])L中的元素,应改为返回镧系元素和Afor系元素

您可以编写程序或函数,并使用我们的任何标准方法来接收输入和提供输出。

您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。

在此处输入图片说明

[资源]

测试用例

由于只有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号
58,
59,L,
60升
61,L,
62,L,
63,L,
64,L,
65,L,
66号
67,L,
68号
69,L,
70升
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号
91,A,
92,A,
93号
94,A,
95,A,
96号
97,A,
98号
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会弄乱任何内置组件:)
James Webster

2
是否允许您为镧系元素和Act系元素返回“ 6,L”和“ 7,A”?
尼尔

1
尚无法发表评论(但),但有时将Hydrogen放在第17组中-但我承认您已使用图像来证明第1组的原因,并且不知道这会使事情变得更难还是更容易?
sjb-2812

1
L很好 这实际上就是我的意图。但由于CSV输出L,我会接受这两种
詹姆斯韦伯斯特

Answers:


10

CJam64 59 58 56 54字节

感谢Dennis节省了2个字节。

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

在线尝试!

将句点和组或单个字符保留在堆栈上。

说明

这里有两个主要想法:

  • 首先,我们处理镧系元素和Act系元素。对于镧系元素,条件为56 <x <72,对于Act系元素,条件为88 <x <104。通过将绝对差取到范围的中心,可以将这两者表示为单个比较:不等式变为| x-64 |。<8| x-96 | <8。但是这些仍然非常相似,分别进行两次比较非常昂贵。因此,我们采用与检查对称范围相同的想法,即与两个范围之间的中心80取另一个绝对差,首先:|| x-80 | -16 | <8。这种情况表明该原子是镧系元素或an系元素,但与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

05AB1E113个 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'Mar

7

Mathematica,77个字节

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

ElementData确定输入是镧系元素还是Act系元素也非常容易,但是大约需要20个字节。


3
认真地,内置再次?
马修·罗

1
@MatthewRoh我敢肯定,使用高尔夫球语言编写的高尔夫球运算法则很容易击败它。
马丁·恩德

@MartinEnder好吧,我实际上可以肯定完全相反。
暴民埃里克(Erik the Outgolfer)'17

@EriktheOutgolfer好,你去了。我确定果冻可以再砍掉30%到50%。
Martin Ender

@MartinEnder我很可能会把它留给丹尼斯,在考试期间我不能做这样的事情。
暴民埃里克(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;“例外”范围。然后修改输入以填充网格中缺少的单元格(或摆脱多余的单元格)。最后,打印异常(除非是falsy 0)或将位置转换为网格坐标。


运行您的示例,我收到的输出是18<t7。这是我做错了吗?(在Mac El Capitan上运行)
James Webster's

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)

程序(通过取代缩短ABC):

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'部分。认真地讲,它长久以来。
马修·罗

1
好奇@MatthewRoh如何测量heck。
hBy2Py

2

Ruby,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”,然后尝试适合18 * 7矩形并使用div / mod。


2

Python 2,137字节

lambda x:[(1+(x>2)+(x>10)+min((~-x/18),3)+(x>86),(x+(x>1)*15+((x>4)+(x>12))*10-((x>71)+(x>103))*14)%18+1),"AL"[89<x]][57<x<72or 89<x<104]

在线尝试!


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]

在线尝试!

想法是对网格位置进行div-mod以获得组和周期。网格位置是n通过位移调整以考虑间隙和L / A收缩的输入。这些是从列表中提取的。

镧系元素和Act系元素的处理很丑陋。这些被分配了大位移200和400,可以使用进行检测/200。我喜欢把人物LA这里,但随后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,即重复的双倍平方数。然后,根据元素是否位于铍-Scan对角线之下,从表的左侧或右侧偏移以找到该组。


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在功能之外吗?它将节省一个字节(空格)
Felipe Nardi Batista

@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适合集团价值的情况。


我想我发现了一个错误。用于确定镧系元素和act系元素的IF应该读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

镧系元素和Act系元素的一些位魔术,
$n-=部分增加和减去间隙和镧系元素/ Act系元素的偏移量,
其余的是简单的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ȯ

在线尝试!

背景

除镧系元素和act系元素外,输出将包含一个以双射基数18表示的整数。例如,氢对应于19 10 = 11 b18,氦气对应于36 10 = 1I b18,eka-on / un /// oganesson对应于114 10 = 7I b18

我们首先将所有可能的原子序数映射到相应的整数,然后将镧系元素和act系元素映射到对应于镧(111 10 = 63 b18)和in(129 10 = 73 b18)的那些)对应的那些。

为此,我们记录代表原子的整数的正向差异。例如,第一个是1I B18 - 11 B18 = H B18 = 17 10,第二个是1(因为是未膨胀的周期表的连续元素之间的所有差异),第四(成为)是2D B18 - 22 B18 = B b18 = 11 10,依此类推。为了映射所有镧系元素和所有act系元素,我们将考虑两个镧系元素之间或to系元素之间的所有差异(例如LaCe)均为0

为了获得原子序数n的期望整数,我们要做的是在差值前加上19(氢)并计算所得向量的前n个元素的总和。然后,输出将简单地显示在双射基数18中,除非它将显示6 3(镧系元素)或7 3(act系元素)。在后一种情况下,我们只需将计算结果替换为LA即可

为了保持水平理智,我们必须对向量进行编码,如下所示。

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,因此我们可以用Jelly代码页中的字符来表示它们。由(literal start)和(解释为整数数组)包围,我们得到Jelly文字

“ÞØ\€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,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.