CJam, 87 83 82 80 octets
0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b5a/4a8**li<{[33:B_B*65_B*1]=\_B%8=B\#*+}/Bb0-`
Le code ci-dessus contient des caractères non imprimables.
Essayez-le en ligne dans l' interpréteur CJam . Si le lien ne fonctionne pas pour vous, copiez à partir de cette pâte .
Contexte
Pour obtenir la configuration électronique du Nième atome, nous partons d'un atome sans électrons et lui appliquons N transformations.
Pour réduire le nombre d'octets de l'implémentation, nous représentons la configuration électronique d'un atome sous forme d'entier. Chaque chiffre de cet entier dans la base 33 correspond au nombre d'électrons dans certaines coquilles; le chiffre le moins significatif représente la coque extérieure.
Par exemple, la configuration électronique du molybdène (42) est [2 8 18 13 1] . Cela correspond à l'entier 2 × 33 4 + 8 × 33 3 + 18 × 33 2 + 13 × 33 + 1 = 26,79,370 .
Le palladium (48) est un cas particulier, que nous traitons comme [2 8 18 18 0] au lieu de [2 8 18 18] .
Cette représentation pratique réduit les transformations susmentionnées à une simple arithmétique:
R += 1
(ajouter un électron à l'enveloppe extérieure)
R += 33
(ajouter un électron à la deuxième coque extérieure)
R += 65
(ajouter deux électrons à la deuxième enveloppe extérieure; en retirer un du premier)
R += 1089
(ajouter un électron à la troisième coque extérieure)
R += 2145
(ajouter deux électrons à la troisième enveloppe extérieure; en retirer un du second)
R *= 33, R += 1
(ajouter une nouvelle coque contenant un seul électron)
Tout ce qui reste est de coder d'une manière ou d'une autre quelle transformation doit être appliquée pour passer d'un atome particulier au suivant. Les différences des représentations entières de deux atomes consécutifs sont les suivantes:
[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]
Les différences uniques dans ce tableau sont les suivantes:
[1 33 65 1089 2145 2369 78401 2598017 85745345 2830095041]
Tous, sauf les 5 premiers, correspondent à des cas où un nouveau shell est ajouté; ceux-ci peuvent être omis car multiplier par 33 et ajouter 1 donne le même résultat que l'ajout de la différence.
Puisque nous devons ajouter une nouvelle coquille si et seulement si l'atome actuel a exactement huit électrons dans sa coquille extérieure (à l'exception de He (2) ↦ Li (3) , qui peut être codé en tant que 65 ), nous pouvons coder ces transformations comme ajouter 1 et déterminer le besoin de multiplication à la volée.
Ainsi, si nous définissons
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]
la configuration électronique du Nième atome peut être calculée comme suit:
while(X < N):
R *= (33 ** (R % 33 == 8))
R += L[T[X]]
X += 1
Comment ça fonctionne
" 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-`
Exemple d'exécution
$ 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 octets)
La sortie est sous la forme
Cela utilise une chaîne magique qui contient des caractères non imprimables, donc je donne le script au format xxd:
Pour les tests en ligne, j'écris la chaîne magique avec des échappements:
mais c'est équivalent lorsque vous ne rencontrez pas de problèmes de collage de caractères dans les zones de texte du navigateur.
L'approche consiste à construire une machine virtuelle avec 7 instructions, chacune manipulant une liste de comptage d'électrons. Ensuite, pour l'élément,
n
nous commençons par une liste de comptage d'électrons0
et exécutons les premièresn
instructions à partir de la liste codée par la chaîne magique.Les instructions sont les suivantes:
1
)
\)\
+)
. (Ceci est utilisé uniquement pour le palladium).+1
@)@@
@+\(2
plutôt que la plus longue@2+@(@
la source
Python 2 (46 + 271 = 327)
Code:
Fichier
f
, contenant les ordures binaires suivantes (ce sont les codes de caractères)Base64:
Sur demande, il s'agit désormais d'un programme complet plutôt que d'une fonction.
Ancienne réponse: Python (ligne de base naïve, 422):
Contenu du zip:
Et un test rapide:
la source
:I
f
pour pouvoir le reproduire?print
tant que mot clé plutôt que fonction).MATLAB -
248244241178 + 44 = 222 octetsMinifié:
Étendu:
Dépendance des fichiers binaires (nom de fichier « a »):
J'espère que c'est un "programme complet" dans la mesure où il peut être invoqué à partir de la ligne de commande, il lit
stdin
et sort versstdout
.Il utilise une sorte de bytecode à deux instructions pour construire les configurations d'électrons. Les deux instructions sont
et
Les instructions sont codées dans deux tableaux. Le premier stocke l'
D
argument dans tous les cas. Le second stocke l'N
argument ou0
pour indiquer unepulldown
instruction, puisqu'ilN = 0
n'est jamais utilisé comme argument.La séquence complète des instructions est la suivante:
Il convient de noter que 28 caractères peuvent être supprimés si nous utilisons le jeu de caractères spécifique à MATLAB, mais je voulais que ma solution soit représentable sous forme de texte en clair sur Stack Exchange, sans aucune référence de fichier externe.Le fichier externe fait référence.
Exemples de sorties
39
:2 8 18 9 2
78
:2 8 18 32 17 1
117
:2 8 18 32 32 18 7
5
:2 3
la source
Perl 5, 235 (234 + 1 pour -E)
Golfé:
Remarque: un vidage hexadécimal est fourni au bas de ce message, car certains des littéraux de chaîne contiennent des caractères de contrôle (qui ont été saisis via un éditeur hexadécimal).
Non golfé avec des commentaires:
Vidage hexadécimal:
la source
CJam,
309289 octetsFonctionne en remplaçant les exécutions courantes (par exemple,
2 8 18 32
) par des entiers supérieurs à 32 et en considérant le tableau de toutes les configurations comme un nombre de base 38, qui est codé en binaire.Exemple d'exécution
la source