Question
Given the atomic number of an element
dans la plage [1-118] sortent le group and period
, de cet élément comme indiqué par le tableau périodique des éléments suivant.
Pour les éléments des séries Lanthanide et Actinide (gammes [57-71] et [89-103]), vous devriez plutôt retourner L
pour les Lanthanides et A
pour les Actinides
Vous pouvez écrire un programme ou une fonction et utiliser l'une de nos méthodes standard de réception d'entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Cas de test
Puisqu'il n'y a que 118 entrées possibles, une liste complète des entrées et sorties attendues est donnée ci-dessous.
Créé à la main, faites-moi savoir s'il y a une erreur!
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
Notation
Code-golf simple . Plus petit nombre d'octets gagne
la source
L
c'est bien. C'est en fait ce que je voulais. Mais depuis la sortie du CSV,L,
j'accepterai les deuxRéponses:
CJam ,
6459585654 octetsMerci à Dennis d'avoir économisé 2 octets.
Essayez-le en ligne!
Laisse soit période et groupe ou un seul caractère sur la pile.
Explication
Il y a deux idées principales ici:
la source
05AB1E ,
11310299 octetsExplication:
Essayez-le en ligne!
la source
1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111
peut réduire les bytecount, sinon c'est bien!Mathematica, 77 octets
Il serait également assez facile à utiliser
ElementData
pour déterminer si l'entrée est un lanthanide ou un actinide, mais cela prendrait environ 20 octets supplémentaires.la source
Python 2 ,
205136 octets-26 octets grâce à @Dead Possum
Essayez-le en ligne!
la source
PHP, 144 octets
Remarque: utilise le codage IBM-850
Courez comme ceci:
Explication
Vérifiez si l'entrée se situe dans les plages de
L
ouA
; les plages "d'exception". Modifiez ensuite l'entrée pour remplir les cellules manquantes dans la grille (ou supprimez les cellules supplémentaires). Enfin, imprimez l'exception (sauf si c'est faux0
) ou convertissez la position en coordonnées de grille.la source
18<t7
. Est-ce quelque chose que je fais mal? (fonctionnant sur Mac El Capitan)ceil
) par "," pour 1 octet supplémentaireGelée , 57 octets
Programme complet qui imprime la sortie souhaitée.
Essayez-le en ligne! (Un programme légèrement modifié qui imprime tout
input : output
peut être vu ici ).Comment?
Construit une liste des 118 sorties possibles, puis sélectionne l'entrée à l'index de l'entrée.
Quelques préparations:
Le programme (abrégée par la substitution
A
,B
etC
):la source
Perl5, 202 octets
la source
Rubis, 130 octets
Obtenez d'abord le 'A' et le 'L' avec le truc du masque de bits, puis essayez de vous adapter à un rectangle 18 * 7 et utilisez un div / mod.
la source
Python 2 , 137 octets
Essayez-le en ligne!
la source
Python 2 , 115 octets
Essayez-le en ligne!
L'idée est de diviser la position de la grille pour obtenir le groupe et la période. La position de la grille est l'entrée
n
ajustée par un déplacement pour tenir compte des écarts et de la contraction L / A. Ceux-ci sont extraits d'une liste.La manipulation des lanthanides et des actinides est moche. Ceux-ci sont affectés de grands déplacements 200 et 400 qui peuvent être détectés avec
/200
. Je voudrais mettre les caractèresL
etA
ici, mais ensuiten+=...
j'ajouterai un caractère à un nombre, donnant une erreur même s'iln
n'est pas utilisé. Sinon pour l'indexation 1,divmod
pourrait être utilisé pour faire référence àn
une seule fois, puis il pourrait être remplacé par son expression,la source
JavaScript (ES7),
10098 octetsExplication: Les séries «L» et «A» sont à boîtier spécial, utilisant une logique au niveau du bit qui m'a fait économiser 3 octets par rapport aux comparaisons directes. Sinon, la fonction trouve récursivement la période
p
contenant le numéro atomique souhaité, le numéro du dernier élément de la période précédentex
et le numéro du dernier élément de la périodey
qui est calculé à chaque fois en notant que les différences sont 2, 2, 8 , 8, 18, 18 c.-à-d. Nombres répétés de carrés doubles. Le groupe est ensuite trouvé en décalant à gauche ou à droite du tableau selon que l'élément se trouve sous la diagonale Béryllium-Scandium ou non.la source
JavaScript (ES6), 136 octets
Tester
Afficher l'extrait de code
la source
Python 2 ,
264227217 octetsEssayez-le en ligne!
Beaucoup trop de crochets. Cela ressemble plus à Brain-Flak.
la source
while
dehors de la fonction? cela économiserait un octet (espace)while
complètement de la boucle :)Excel, 192 octets
Loin d'être jolie. Emprunts des réponses Python existantes
Luttant pour gérer le cas où la
MOD(x,18)=0
valeur de groupe gracieusement.la source
IF(A1<80
?Rubis, 116 octets
Commenté dans le programme de test
la source
PHP, 120 octets
prend l'entrée de STDIN, exécutez avec
-nR
.un peu de magie au niveau du bit pour les Lanthanides et Actinides,
la
$n-=
partie ajoute et soustrait des décalages pour les lacunes et Lanthanides / Actinides,le reste est simple mod / div.
Un port itératif de la réponse de Neil prend 108 octets :
la source
Perl, 169 octets
En utilisant:
la source
Gelée ,
4943424139 octetsEssayez-le en ligne!
Contexte
À l'exception des lanthanides et des actinides, la sortie consistera en un entier exprimé en base bijective 18. Par exemple, l'hydrogène correspond à 19 10 = 11 b18 , l'hélium à 36 10 = 1I b18 et eka-radon / ununoctium / oganesson à 114 10 = 7I b18 .
Nous commençons par cartographier tous les numéros atomiques que nous pouvons sur les entiers correspondants, tout en cartographiant les lanthanides et les actinides sur ceux qui correspondent au lanthane ( 111 10 = 63 b18 ) et à l'actinium ( 129 10 = 73 b18 ).
Pour ce faire, nous enregistrons les différences directes des entiers qui représentent les atomes. Par exemple, le premier est 1I b18 - 11 b18 = H b18 = 17 10 , le second est 1 (comme le sont toutes les différences entre les éléments consécutifs du tableau périodique non développé), le quatrième ( B to Be ) est 2D b18 - 22 b18 = B b18 = 11 10 , etc. Pour cartographier tous les lanthanides et tous les actinides, nous considérerons que toutes les différences entre deux lanthanides ou les actinides (par exemple, La à Ce ) sont égales à 0 .
Pour obtenir l'entier souhaité pour un numéro atomique n , il suffit d'ajouter 19 (hydrogène) aux différences et de calculer la somme des n premiers éléments du vecteur résultant. Le résultat est alors simplement affiché dans la base bijective 18, à moins que cela ne montre 6 3 (lanthanides) ou 7 3 (actinides). Dans ce dernier cas, on remplace simplement le résultat calculé avec L ou A .
Enveloppé pour la raison horizontale, le vecteur que nous devons coder ressemble à ceci.
Après l'encodage de la longueur d'exécution, nous obtenons ce qui suit.
Pour réduire encore plus l'espace requis pour coder le vecteur, nous supprimons les 1 (longueurs) les plus à droite et ajoutons 1 aux pistes.
Maintenant, nous pouvons convertir de manière réversible ces tableaux de chiffres de la base 45 en entiers.
Tous ces éléments sont plus petits que 250 , nous pouvons donc les représenter avec des caractères de la page de codes de Jelly . Entouré de
“
(début littéral) et‘
(interpréter comme un tableau entier), nous obtenons le littéral Jellyqui apparaît textuellement dans le code.
Comment ça marche
la source