Ce défi est inspiré de cette citation d'Oliver Sacks:
«À 11 ans, je pourrais dire« Je suis du sodium »(Élément 11), et maintenant à 79 ans, je suis or.» - Oliver Sacks
Je veux que vous trouviez des nombres dans une chaîne et les remplaciez par les symboles de leurs éléments correspondants. (1 est H, 2 est He, 3 est Li, etc.) Il y a quelques règles à suivre:
- Les chiffres simples et doubles sont remplacés par leurs éléments correspondants comme d'habitude. Ignorez les 0 au début des nombres. S'il n'y a que des 0 dans un nombre, ignorez-le. Par exemple
1 01 10 0 00
devientH H Ne 0 00
- Plus de 2 chiffres ensemble sont divisés en groupes de 2. Un nombre impair de chiffres doit avoir le seul chiffre supplémentaire à la fin. Par exemple
0153 5301 153
, deviendraitHI IH PLi
En raison de cette règle, vous aurez seulement besoin de connaître les éléments de 1 à 99 - Les nombres doivent être traités de la même manière quels que soient les caractères qui les entourent et les virgules et les décimales ne font pas partie des nombres.
P90X 42,800 3.14159
deviendraitPThX Mo,Hg0 Li.SiPF
Exemples d'entrées / sorties (E / S):
I: 32289216
O: GeNiUS
I: J08017 5811
O: JOHN CeNa
I: M18227 0592tt10r
O: MArTiN BUttNer
I: De072816
O: DeNNiS
I: D088r1907085
O: DOOrKNOB
I: 13ex A.
O: Alex A.
L'entrée sera dans le format le plus proche d'une chaîne de votre langue.
Un tableau périodique pour référence:
Il s'agit de code-golf , donc votre programme sera noté en octets.
Réponses:
Mathematica,
969489 octetsMma a plusieurs jeux de données ...
la source
JavaScript (ES6), 202 octets
La chaîne omise contient des caractères non imprimables, voici donc un hexdump (espérons-le réversible):
La technique ici était de mettre toutes les abréviations d'élément dans une chaîne, séparées par rien - c'est à cela que
/[A-Z][a-z]?/g
sert le deuxième regex ; il correspond à chaque lettre majuscule, éventuellement suivie d'une lettre minuscule. Le premier regex,,/\d\d?/g
correspond à chaque ensemble de 2 (ou 1) chiffres dans l'entrée, donc cela remplace chaque ensemble de chiffres N par l'élément à l'index N dans la chaîne correspondante décompressée.Voici la chaîne d'origine, si quelqu'un d'autre souhaite l'utiliser: (les
A
à la fin sont des remplisseurs)Questions et suggestions bienvenues!
la source
Uus
etUuo
?+y?...:...
car vous remplacez les groupes de chiffres[y]
au lieu de[+y]
et enregistrer 1 octetPython 3,
278285 octetsCas de test:
la source
f('P90X 42,800 3.14159')
renvoie «PThX Mo, Hgs Li.SiPF» au lieu de «PThX Mo, Hg0 Li.SiPF» etf('1 01 10 0 00')
renvoie «HH Ne s s» au lieu de «HH Ne 0 00» . Soit dit en passant, je viens d'utiliser votre approche de découpage étendu dans ma solution Python 2. Merci!Python 2,
312304 octetsCelui-ci crée une fonction f qui prend une chaîne de nombres comme argument et retourne la chaîne correspondante avec les symboles des éléments remplacés.
La fonction itère sur des chaînes de un à deux chiffres ( '1' , '01' , '10' , '00' mais pas '0' ) ou un caractère ( 'a' , '0' mais pas '1' ). Dans le cas des chiffres, la chaîne est convertie en un entier et recherchée dans une chaîne concaténée de symboles d'éléments où chaque symbole est rempli de deux caractères. Dans le cas des caractères, la chaîne est simplement utilisée sans recherche.
Les tests pour chaque exemple de la question réussissent tous:
la source