CJam, 87 83 82 80 Bytes
0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b5a/4a8**li<{[33:B_B*65_B*1]=\_B%8=B\#*+}/Bb0-`
Der obige Code enthält nicht druckbare Zeichen.
Probieren Sie es online im CJam-Interpreter aus . Wenn der Link für Sie nicht funktioniert, kopieren Sie ihn aus dieser Paste .
Hintergrund
Um die Elektronenkonfiguration des N-ten Atoms zu erhalten, beginnen wir mit einem Atom ohne Elektronen und wenden N- Transformationen darauf an.
Um die Byteanzahl der Implementierung zu reduzieren, stellen wir die Elektronenkonfiguration eines Atoms als ganze Zahl dar. Jede Ziffer dieser ganzen Zahl in der Basis 33 entspricht der Anzahl der Elektronen in einer bestimmten Schale; Die niedrigstwertige Ziffer steht für die äußere Hülle.
Zum Beispiel ist die Elektronenkonfiguration von Molybdän (42) [2 8 18 13 1] . Dies entspricht der ganzen Zahl 2 × 33 4 + 8 × 33 3 + 18 × 33 2 + 13 × 33 + 1 = 26,79,370 .
Palladium (48) ist ein Sonderfall, den wir als [2 8 18 18 0] anstelle von [2 8 18 18] behandeln .
Diese bequeme Darstellung reduziert die oben erwähnten Transformationen auf einfache Arithmetik:
R += 1
(füge ein Elektron zur äußeren Hülle hinzu)
R += 33
(füge ein Elektron zur zweiten äußeren Hülle hinzu)
R += 65
(füge zwei Elektronen zur zweiten äußeren Hülle hinzu; entferne eines von der ersten)
R += 1089
(füge ein Elektron zur dritten äußeren Hülle hinzu)
R += 2145
(Addiere zwei Elektronen zu der dritten äußeren Hülle; entferne eines von der zweiten)
R *= 33, R += 1
(füge eine neue Hülle hinzu, die ein einzelnes Elektron enthält)
Alles, was übrig bleibt, ist, irgendwie zu kodieren, welche Transformation angewendet werden muss, um von einem bestimmten Atom zum nächsten zu gelangen. Die Unterschiede der ganzzahligen Darstellungen zweier aufeinanderfolgender Atome sind wie folgt:
[1 1 65 1 1 1 1 1 1 1 2369 1 1 1 1 1 1 1 78401 1 33 33 33 65 1 33 33 33 65 1 1 1 1 1 1 1 2598017 1 33 33 65 33 1 65 33 65 1 1 1 1 1 1 1 1 85745345 1 33 1089 2145 1089 1089 1089 1089 33 2145 1089 1089 1089 1089 1089 33 33 33 33 33 33 33 65 33 1 1 1 1 1 1 1 2830095041 1 33 33 2145 1089 1089 2145 1089 33 2145 1089 1089 1089 1089 1089 65 1 33 33 33 33 33 33 65 1 1 1 1 1 1 1]
Die einzigartigen Unterschiede in diesem Array sind die folgenden:
[1 33 65 1089 2145 2369 78401 2598017 85745345 2830095041]
Alle bis auf die ersten 5 entsprechen Instanzen, in denen eine neue Shell hinzugefügt wird. Diese können weggelassen werden, da das Multiplizieren mit 33 und Addieren von 1 dasselbe Ergebnis wie das Addieren der Differenz ergibt.
Da wir nur dann eine neue Hülle hinzufügen müssen, wenn das aktuelle Atom genau acht Elektronen in seiner äußeren Hülle hat (mit Ausnahme von He (2) ↦ Li (3) , das als add 65 kodiert werden kann ), können wir kodieren Diese Transformationen addieren sich zu 1 und bestimmen die Notwendigkeit einer spontanen Multiplikation.
Also, wenn wir definieren
X := 0
I := 0
L := [33 1089 65 2145 1]
T := [1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 1 0 0 0 3 1 1 1 1 1 1 1 1 1 0 0 3 0 1 3 0 3 1 1 1 1 1 1 1 1 1 1 0 2 4 2 2 2 2 0 4 2 2 2 2 2 0 0 0 0 0 0 0 3 0 1 1 1 1 1 1 1 1 1 0 0 4 2 2 4 2 0 4 2 2 2 2 2 3 1 0 0 0 0 0 0 3 1 1 1 1 1 1 1]
Die Elektronenkonfiguration des N-ten Atoms kann wie folgt berechnet werden:
while(X < N):
R *= (33 ** (R % 33 == 8))
R += L[T[X]]
X += 1
Wie es funktioniert
" Push 0, the initial value of R; convert the following array into an integer by
considering it a base 256 number, then back to the array of its digits in base 6. ";
0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b
" Replace each 5 in the resulting array by [4 4 4 4 4 4 4 4]. This yields the array T
from the above section. ";
5a/4a8**
" Read an integer N from STDIN and discard all but the first N elements of T. ";
li<
" For each element Y of the remainder of T, do the following: ";
{
[33:B_B*65_B*1]=\ " Define B := 33, push L, retrieve L[Y] and swap it with R. ";
_B%8=B\#* " Execute R *= 33 ** (R % 33 == 8). ";
+ " Execute R += L[Y]. ";
}/
" Convert R into the array of its digits in base 33, remove eventual zeros (Palladium)
and replace the resulting array with its string representation. ";
Bb0-`
Beispiellauf
$ base64 -d > electrons.cjam <<< MCJoVEgM+OzwErzEGL9o5erbvqrUB4YZhrwRIjI1NmI2YjVhLzRhOCoqbGk8e1szMzpCX0IqNjVfQioxXT1cX0IlOD1CXCMqK30vQmIwLWA=
$ cksum electrons.cjam
3709391992 80 electrons.cjam
$ for i in {1..118}; do LANG=en_US cjam electrons.cjam <<< $i; echo; done
[1]
[2]
[2 1]
[2 2]
[2 3]
[2 4]
[2 5]
[2 6]
[2 7]
[2 8]
[2 8 1]
[2 8 2]
[2 8 3]
[2 8 4]
[2 8 5]
[2 8 6]
[2 8 7]
[2 8 8]
[2 8 8 1]
[2 8 8 2]
[2 8 9 2]
[2 8 10 2]
[2 8 11 2]
[2 8 13 1]
[2 8 13 2]
[2 8 14 2]
[2 8 15 2]
[2 8 16 2]
[2 8 18 1]
[2 8 18 2]
[2 8 18 3]
[2 8 18 4]
[2 8 18 5]
[2 8 18 6]
[2 8 18 7]
[2 8 18 8]
[2 8 18 8 1]
[2 8 18 8 2]
[2 8 18 9 2]
[2 8 18 10 2]
[2 8 18 12 1]
[2 8 18 13 1]
[2 8 18 13 2]
[2 8 18 15 1]
[2 8 18 16 1]
[2 8 18 18]
[2 8 18 18 1]
[2 8 18 18 2]
[2 8 18 18 3]
[2 8 18 18 4]
[2 8 18 18 5]
[2 8 18 18 6]
[2 8 18 18 7]
[2 8 18 18 8]
[2 8 18 18 8 1]
[2 8 18 18 8 2]
[2 8 18 18 9 2]
[2 8 18 19 9 2]
[2 8 18 21 8 2]
[2 8 18 22 8 2]
[2 8 18 23 8 2]
[2 8 18 24 8 2]
[2 8 18 25 8 2]
[2 8 18 25 9 2]
[2 8 18 27 8 2]
[2 8 18 28 8 2]
[2 8 18 29 8 2]
[2 8 18 30 8 2]
[2 8 18 31 8 2]
[2 8 18 32 8 2]
[2 8 18 32 9 2]
[2 8 18 32 10 2]
[2 8 18 32 11 2]
[2 8 18 32 12 2]
[2 8 18 32 13 2]
[2 8 18 32 14 2]
[2 8 18 32 15 2]
[2 8 18 32 17 1]
[2 8 18 32 18 1]
[2 8 18 32 18 2]
[2 8 18 32 18 3]
[2 8 18 32 18 4]
[2 8 18 32 18 5]
[2 8 18 32 18 6]
[2 8 18 32 18 7]
[2 8 18 32 18 8]
[2 8 18 32 18 8 1]
[2 8 18 32 18 8 2]
[2 8 18 32 18 9 2]
[2 8 18 32 18 10 2]
[2 8 18 32 20 9 2]
[2 8 18 32 21 9 2]
[2 8 18 32 22 9 2]
[2 8 18 32 24 8 2]
[2 8 18 32 25 8 2]
[2 8 18 32 25 9 2]
[2 8 18 32 27 8 2]
[2 8 18 32 28 8 2]
[2 8 18 32 29 8 2]
[2 8 18 32 30 8 2]
[2 8 18 32 31 8 2]
[2 8 18 32 32 8 2]
[2 8 18 32 32 10 1]
[2 8 18 32 32 10 2]
[2 8 18 32 32 11 2]
[2 8 18 32 32 12 2]
[2 8 18 32 32 13 2]
[2 8 18 32 32 14 2]
[2 8 18 32 32 15 2]
[2 8 18 32 32 16 2]
[2 8 18 32 32 18 1]
[2 8 18 32 32 18 2]
[2 8 18 32 32 18 3]
[2 8 18 32 32 18 4]
[2 8 18 32 32 18 5]
[2 8 18 32 32 18 6]
[2 8 18 32 32 18 7]
[2 8 18 32 32 18 8]
GolfScript (96 Bytes)
Die Ausgabe erfolgt in der Form
Hierfür wird eine magische Zeichenfolge verwendet, die nicht druckbare Zeichen enthält. Daher gebe ich das Skript im xxd-Format aus:
Zum Online-Testen schreibe ich die magische Zeichenfolge mit Escapezeichen:
Dies ist jedoch äquivalent, wenn Sie keine Probleme beim Einfügen von Zeichen in Browsertextbereiche haben.
Der Ansatz besteht darin, eine virtuelle Maschine mit 7 Befehlen zu erstellen, von denen jeder eine Liste von Elektronenzahlen manipuliert. Dann
n
beginnen wir für das Element mit einer Elektronenzählungsliste von0
und führen die erstenn
Anweisungen aus der Liste aus, die von der magischen Kette codiert wird.Die Anweisungen sind:
1
)
\)\
+)
. (Dies wird nur für Palladium verwendet).+1
@)@@
@+\(2
eher als die längere ausgeführt wird@2+@(@
quelle
Python 2 (46 + 271 = 327)
Code:
Datei
f
, die den folgenden binären Müll enthält (das sind die Zeichencodes)Base64:
Auf Anfrage ist dies nun ein vollständiges Programm und keine Funktion.
Alte Antwort: Python (Naive Baseline, 422):
Inhalt der Zip:
Und ein kurzer Test:
quelle
:I
f
damit ich sie reproduzieren kann?print
als Schlüsselwort und nicht als Funktion).MATLAB -
248244241178 + 44 = 222 BytesMinimiert:
Erweitert:
Abhängigkeit von Binärdateien (Dateiname ' a '):
Ich vertraue darauf, dass dies ein "vollständiges Programm" ist, da es von der Kommandozeile aufgerufen werden kann, von der es liest
stdin
und an die es ausgibtstdout
.Es verwendet eine Art Bytecode mit zwei Befehlen, um die Elektronenkonfigurationen aufzubauen. Die beiden Anweisungen sind
und
Die Anweisungen sind in zwei Arrays codiert. Das erste speichert das
D
Argument in allen Fällen. Der zweite speichert dasN
Argument oder0
einepulldown
Anweisung, daN = 0
es nie als Argument verwendet wird.Die vollständige Abfolge der Anweisungen lautet:
Es ist erwähnenswert, dass 28 Zeichen gelöscht werden können, wenn wir den MATLAB-spezifischen Zeichensatz verwenden, aber ich wollte, dass meine Lösung in Stack Exchange als Klartext ohne externe Dateiverweise darstellbar ist.Externe Dateiverweise sind es.
Beispielausgaben
39
:2 8 18 9 2
78
:2 8 18 32 17 1
117
:2 8 18 32 32 18 7
5
:2 3
quelle
Perl 5, 235 (234 + 1 für -E)
Golf gespielt:
Hinweis: Am Ende dieses Beitrags befindet sich ein Hex-Dump, da einige der String-Literale Steuerzeichen enthalten (die über einen Hex-Editor eingegeben wurden).
Ungolfed mit Kommentaren:
Hex Dump:
quelle
CJam,
309289 BytesErsetzt gängige Läufe (z. B.
2 8 18 32
) durch Ganzzahlen größer als 32 und betrachtet das Array aller Konfigurationen als Basis-38-Zahl, die binär codiert ist.Beispiellauf
quelle