化学101-周期表の概要


24

質問

Given the atomic number of an element[1-118]の範囲ではgroup and period、次の元素周期表で与えられる、その元素のを出力します。

ランタニドおよびアクチニドシリーズの要素(範囲[57-71]および[89-103])の場合、代わりLにランタニドおよびAアクチニドに戻る必要があります。

プログラムまたは関数を記述し、入力を受け取り、出力を提供する当社の標準的な方法のいずれかを使用できます。

任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。

ここに画像の説明を入力してください

[ソース]

テストケース

可能な入力は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、ランタニドとアクチニドがビルトインを台無しにすることを願っています:)
ジェームズウェブスター

2
ランタニドとアクチニドに「6、L」と「7、A」を返すことは許可されていますか?
ニール

1
コメントすることはできませんが(時には)、グループ17に水素が配置されます-しかし、グループ1の理由を正当化するために画像を使用したことを認めます。
sjb-2812

1
L結構です。それが実際に私が意図したことです。しかし、CSVを出力するのでL,、私は両方受け入れるだろう
ジェームズ・ウェブスター

回答:


10

CJam64 59 58 56 54バイト

2バイトを節約してくれたDennisに感謝します。

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

オンラインでお試しください!

スタックにピリオドとグループ、または単一の文字を残します。

説明

ここには2つの主なアイデアがあります。

  • まず、ランタニドとアクチニドを扱います。ランタニドの条件は56 <x <72、アクチニドの条件は88 <x <104です。これらは両方とも、範囲の中心との絶対差を取ることにより、単一の比較として表現できます。不等式は| x-64 |になります <8および| x-96 | <8、それぞれ。しかし、これらはまだ非常によく似ており、2つの比較を別々に行うのは高価です。我々は、中心に別の絶対差を取ることによって、対称範囲を確認するのと同じ考え方は適用せ間の二つの範囲、80最初に、:|| X-80 | -16 | <8。この条件は、原子がランタニドまたはアクチニドのいずれかであることを示しますが、これら2つのケースを区別することは、80(または範囲内の他の値)と比較するのと同じくらい簡単です。
  • 出力は実際には幅18のテーブルのインデックスであるため、2桁がグループと期間を与えるように、値をベース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バイト数が減る場合があります。
魔法のタコUr

7

Mathematica、77バイト

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

また、非常に使いやすいでしょう ElementData入力がランタニドかアクチニドかを判断ですが、さらに20バイトほどかかります。


3
真剣に、再びビルトイン?
マシュー

1
@MatthewRohゴルフ言語でのよくできた算術解法はこれを簡単に打ち負かすと確信しています。
マーティンエンダー

@MartinEnderまあ、私は実際に正反対のことを確信しています。
エリックアウトゴルファー

@EriktheOutgolferさて、そこに行きます。Jellyがさらに30〜50%削減できると確信しています。
マーティンエンダー

@MartinEnderおそらくそれをデニスに任せるでしょう。試験期間中はそんなことはできません。
エリックアウトゴルファー


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

説明

入力用の範囲内にあるかどうかをチェックしますLA。「例外」範囲。次に、入力を修正してグリッド内の欠落セルを埋めます(または余分なセルを取り除きます)。最後に、例外を出力します(偽の場合を除く0)か、位置をグリッド座標に変換します。


あなたの例を実行すると、私が受け取る出力は18<t7です。これは私が間違っていることですか?(マックエルキャピタンで実行)
ジェームズウェブスター

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で短縮):BC

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が一体どのように測定したかを知りたい。
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」を取得してから、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]

オンラインでお試しください!

考え方は、グリッド位置をdiv-modして、グループと期間を取得することです。グリッド位置は、nギャップとL / A収縮を考慮して変位によって調整された入力です。これらはリストから抽出されます。

ランタニドとアクチニドの取り扱いは見苦しいです。これらには、で検出できる大きな変位200および400が割り当てられ/200ます。私は文字入れしたいLAここを、その後n+=...場合でも、エラーを与え、数に文字を追加しますn使用されていません。1-indexingでない場合は、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、つまり、繰り返される2乗平方数。次に、要素がベリリウム-スカンジウム対角線の下にあるかどうかに応じて、テーブルの左または右からオフセットすることにより、グループが見つかります。


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

パイソン2264の 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関数の外に配置することはできませんか?1バイト(スペース)を節約できます
フェリペナルディバティスタ

@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は読むべきIF(A1<80ですか?
ジェームズウェブスター

@JamesWebster、よく見分けられます。修正しました。
ヴェルニッシュ

0

ルビー、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ます。

ランタニドおよびアクチニドのためのいくつかのビット単位の魔法、一部が追加され、減算ギャップのオフセットをし、ランタニド/アクチニド、
$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ȯ

オンラインでお試しください!

バックグラウンド

ランタニドおよびアクチニドを除いて、出力は、全単射例えばベース18、水素相当に発現整数からなるであろう19 10 = 11 B18に、ヘリウム36 10 = 1IのB18エカ・ラドン/ウンウンオクチウム/ oganessonに、及び114 10 = 7I b18

ランタニドとアクチニドをランタン(111 10 = 63 b18)とアクチニウム(129 10 = 73 b18)に対応するものにマッピングしながら、可能なすべての原子番号を対応する整数にマッピングすることから始めます。

これを行うために、原子を表す整数の前方差分を記録します。例えば、最初は、1IのB18 - 11 B18 = HのB18 = 17 10、秒は1が、第((膨張していないとして、周期律表の連続する要素間の全ての相違はあります) Bためして)である2次元B18が - 22 B18 = B b18 = 11 10など。すべてのランタニドおよびすべてのアクチニドをマッピングするために、2つのランタニドまたはアクチニド(LaからCeなど)のすべての違いを0と見なします。

原子番号nに必要な整数を取得するには、差分に19(水素)を追加し、結果のベクトルの最初のn個の要素の合計を計算するだけです。出力は、6 3(ランタニド)または7 3(アクチニド)が表示されない限り、全単射18に単純に表示されます。後者の場合、計算結果を単に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より小さいため、Jellyのコードページの文字で表すことができます(リテラル開始)と(整数配列として解釈)に囲まれた、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].

これはおもしろい答えですが、出力に落ちると思います。入力のグループと期間を出力する代わりに、テーブル全体の原子番号、グループ、および期間を出力するように見えます。単語の辞書の定義を要求し、辞書を出力しただけかどうかを検討してください。
ジェームズウェブスター

フッターは、検証を容易にするためのテストスイートを提供します。これを削除して入力を引数として指定すると、仕様が要求する情報のみが出力されます。tio.run/nexus/jelly#@29i@qhhzuF5h2fEPGpakwjEjxq3WedYZz5qmJFUoQ/…-
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.