Dans leur insupportable sagesse, l' IUPAC a créé un nom d'élément systématique pour tout élément nouvellement créé. C'est le nom temporaire d'un élément jusqu'à ce qu'ils se décident enfin du nom réel. Cela fonctionne comme suit: chaque préfixe d'un numéro d'élément se voit attribuer un préfixe en fonction de sa valeur. Les préfixes sont concaténés avec "ium" à la fin. Lorsque cela est fait et si vous obtenez double i (ii) ou triple n (nnn), remplacez-les par simples i et doubles n. Le symbole de l'élément est la première lettre de chaque préfixe utilisé, concaténé et en majuscule. Les préfixes utilisés sont ci-dessous.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Donc, pour ce golf, votre code doit générer à la fois le nom de l'élément et son symbole pour un entier positif donné. Donc, si votre code a été donné 137, il devrait imprimer sur stdout ou renvoyer les deux untriseptium
et Uts
. Il devrait être valide d'au moins 118 à 558 . Toute valeur supérieure est valable si elle n'augmente pas la longueur de votre code.
Exemple Python montrant la méthode:
def elename(n):
'''Return name and symbol of new element for given element number.'''
prefixes=['nil','un','bi','tri','quad','pent','hex','sept','oct','enn']
nmeFixes, symFixes = [], []
while n: # each digit of element number is assigned a prefix
n, i = divmod(n, 10)
pf = prefixes[i]
symFixes.append(pf[0]) # symbol uses only first letter of prefix
nmeFixes.append(pf)
# loop assembled prefixes in reverse order
nmeFixes.reverse()
symFixes.reverse()
nmeFixes.append('ium') # suffix
name = ''.join(nmeFixes)
symb = ''.join(symFixes).capitalize()
# apply rule about too many n's or i's
name = name.replace('nnn','nn') # can happen with -90-
name = name.replace('ii','i') # -2ium or -3ium
return name, symb
Eric Towers gagne avec des octets de cadmium!
Réponses:
Mathematica 10.1,
indium (49)cadmium (48)Cette solution utilise une bibliothèque intégrée de propriétés d'élément, y compris les noms et les abréviations IUPAC. (Je n’ai pas vu cela comme une technique à éviter en Golf. Cela semble être encouragé. Mais c’est peut-être à la limite de ce qui est acceptable - Mathematica implémente cette bibliothèque (et beaucoup d’autres) en téléchargeant des données depuis Les serveurs de Wolfram la première fois que vous l'utilisez (et je suppose que vérifie les mises à jour à l'occasion).)
Comment cela se compare-t-il à l'utilisation d'éléments.py ou periodictable.py en Python?
Edit: Des mois plus tard: J'ai remarqué que j'avais écrit l'abréviation pour 122. J'ai relu le code et vérifié que j'avais commis cette erreur, pas Mathematica.
la source
f
lui - même une fonction pure:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&
.Python 3, Unhexseptium (167) octets
Ce sont les résultats lorsque le programme est exécuté sur chaque nombre de 1 à 999 (inclus)
la source
Pip ,
radiumactiniumthorium(86)(N'inspirez pas cette entrée, cela vous donnera un cancer du poumon.)
Prend le numéro d'élément en tant qu'argument de ligne de commande et affiche le nom et l'abréviation sur des lignes séparées.
Explication (un peu non golfée):
Le traitement de
ii
andnnn
utilise un remplacement de regex avec une fonction de rappel (ajoutée dans la version la plus récente de Pip): pour chaque correspondance deii|nnn
, prenez tous les caractères sauf le premier et utilisez-les en remplacement.la source
GNU sed, 171 (unseptunium)
Je suppose que l'ordre dans lequel le nom et le symbole sont retournés n'a pas d'importance. Ici, le symbole vient en premier:
la source
g
; les seuls cas seraientbiium
/triium
etennnil
, tous ne pouvant se produire qu'une seule fois par moins de 1000.Mathematica, unhexunium
163161 octetscapitalise maintenant le symbole
Ceci est Mathematica sans la fonction intégrée
ElementData
.Test sur 10 nombres aléatoires:
la source
JavaScript (ES6) 164 (unhexquadium)
171La capitalisation est la partie la plus délicate. (Test en FireFox)
Éditez 3 octets sauvegardés thx user2786485
la source
*enium
au lieu de*ennium
pour tout ce qui est*9
[...n]
échouera pour un paramètre int. Le défi est d'environa given positive integer
replace(/i(i)|n(nn)/g,'$1$2')
Ruby -
163156147143134 (Untriquadium) octetsJ'espère jouer au golf de cette façon
Edit: Merci pour @steveverrill pour avoir réduit de 9 octets!
Edit2: Merci encore pour @steveverrill pour encore 4 octets! (Solution vraiment intelligente!)
la source
each_char
vous pouvez utiliserchars
. Selon la documentation officielle Ruby est ce « désapprouvée » (mais pas codegolf!) Vous auriez probablement faire mieux aveceach_byte
oubytes
puisc.to_i
devient par exemplei%48
. 2. Aussi par hasard\n
a le code ascii 10, alors vous pouvez peut-être vous débarrasser de lachop
et l'inclureium
dans votre tableau (fonctionne très bien pour le nom de l'élément, mais ajoute un caractère parasitei
au symbole de l'élément.)tr_s
ce qui suit:o=u='';gets.bytes{|c|k=%w[Nil un bI trI quad pent hex sept oct enN Ium][c%48];o+=k;u+=k[0]};puts o.tr_s('IN','in'),u[0..-2].downcase.capitalize
u.chop
est plus court queu[0..-2]
. J'aurais peut-être dû poster ma propre réponse, mais mon idée initiale était de le faire exactement comme vous l'avez fait. C'est amusant de t'aider à jouer au golf. J'ai complètement manqué que vous n'avez pas besoindowncase
avantcapitalize
.Pyth, 67 octets (Holmium)
Essayez-le en ligne dans le compilateur / exécuteur Pyth .
Comment ça fonctionne
la source
JavaScript (ES6),
210202 octets (BiunniliumBinilbium)Moins octium (8) octets, grâce à @ edc65!
130 159 147 octets (Untrinilium Unpentennium Unquadseptium)Entrée comme
f(324)
. Ugh, je me sentais tellement golf-y.la source
CJam,
7472717069 octets (Thulium)Notez que le code contient des caractères non imprimables.
Merci à @ Sp3000 d'avoir signalé une erreur dans ma révision initiale et d'avoir suggéré l'
)/
approche.Essayez en ligne à l' interprète CJAM: .
Comment ça fonctionne
la source
Matlab, 170 (Unseptnilium)
Fonctionne sur toutes les entrées que vous pouvez lancer, de
nilium
haut en bas, aussi loin que vous le souhaitez. J'y suis arrivéennennennennennennennennennennennennennennennennennennennennennennium
avant d'abandonner avec l'appui de la touche 9.Et une explication:
la source
TI-BASIC,
223218 octetsL'élément numéro N ne peut avoir un triple "n" que s'il se termine par 90, et ne peut avoir un double "i" que si le dernier chiffre est 2 ou 3. Nous utilisons les mathématiques pour vérifier ces cas.
Le nombre magique
1.5154
, qui stocke la longueur de chaque préfixe, a été trouvé en utilisant un script Python pour rechercher toutes les décimales de longueur ≤ 7 en utilisant les fonctionscosh(
,cos(
ete^(
.Pas encore de jouer au golf, mais les lettres minuscules à deux octets et le manque de commandes de manipulation des cordes de TI-BASIC vont, comme toujours, nuire au score de ce programme.
la source
Python 3, unpentquadium (
156155154) octetsPlutôt que de remplacer
ii
par uni
renvoi, nous renversons lesi
s avant de virer de bordium
, car c’est la seule source possible de doublei
s. De la même manière, nous décaponsn
s en recherchant unenn/nil
cas.la source
Retina,
206196186179 (Unseptennium) octets ( Essayez en ligne )Merci à @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ) de m'avoir appris cette langue.
Merci à @FryAmTheEggman d' avoir coupé 7 octets.
Version Ueh-Byte: ici
Version Bnh-Byte: ici
la source
CJam, 95 octets
Essayez-le en ligne
Ceci entre en compétition dans la catégorie "langages sans regex, et n'utilisant que des caractères imprimables". ;) Je ne m'attendais pas vraiment à une solution aussi courte que certaines des solutions déjà publiées, mais j'étais curieuse de savoir combien de temps elle durerait. Et depuis que je l’ai maintenant, je pourrais aussi bien le poster.
Explication:
la source
Go, 322 octets (tribibium)
Lit trois caractères de STDIN, plus sont ignorés, moins de résultats dans un crash. Donc, cela fonctionne pour chaque nombre compris entre
unnilnilium
etennennennium
.la source
PowerShell,
170168165 (Unhexpentium)Assez simple et sans surprises ici. Sauf peut-être que j'ai résolu le problème de la capitalisation en mettant les minuscules tout sauf la première partie et en ayant les différentes parties déjà dans le titre. Désormais, il est impérativement intégré pour éviter de perdre des caractères lors d’affectations de variables nues.
Bonus après le dernier changement: fonctionne désormais pour les numéros d'élément plus longs:
la source
C sur x86, 192 (Unennbium)
Lit les chiffres
stdin
et imprime les résultats dansstdout
. S'appuie sursizeof(char*) == sizeof(int)
.Version non-golfée:
la source
Haskell, bipentbium (
305271269265261259253252 octets)Rasé 34 octets grâce à Nimi.
la source
nnn
et lesii
cas dansr
, par exempler('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=x
et l' appeler sans arguments:t=r.m.p
.concatMap
is>>=
, c'estp n=(n>>=(words"..."!!))++"ium "
GNU sed, unhexunium (161 octets)
Je génère d'abord le symbole, puis le cache dans un espace réservé et crée le nom. Une boucle est plus golfeuse que l’utilisation
/g
de quatre remplacements ou plus (nous ne pouvons avoir qu’unii
et / ou unnnn
, ils n’ont donc pas besoin d’être à l’intérieur de la boucle, mais cela ne fait pas mal). Enfin, récupérez et ajoutez le symbole maintenu.(NB: je n'avais pas vu la réponse sed existante quand j'ai écrit ça)
Cas de test
Ces règles
ii
etnnn
règles spéciales:Et un ridicule, montrant combien ce code donne plus par rapport au monde physique:
la source
T-SQL 329 octets
Formaté:
la source
PHP, 152
153163octets, unpentbiumEh bien, au moins PHP est quelque part autour de la moyenne cette fois-ci.
Fonctionne en ligne de commande comme:
Sortie:
Ungolfed
Modifier
array()
-initializer par[]
'ium '
place en utilisant une concaténation supplémentaire.' '.
la source
Perl, 109 octets
108 code + 1 commutateur
Prend l'entrée de STDIN sous la forme d'un nombre par ligne.
la source
Java 8 216 octets
la source
ii
etnnn
, comme expliqué dans la question. 3. L'objectif du code golf est de rendre le code aussi court que possible. La réponse devrait contenir son score dans le titre. Vous pouvez réduire votre score en éliminant les espaces et en raccourcissant le nom de la variable.C #
229 (Bibiennium)198 octets unennoctiumLe truc "n-'0" est un moyen de convertir d'asci en int. Caractère 9 = ASCII 57. Caractère 0 = ASCII 48, donc 57-48 = 9.
Chaîne privée statique ToText (int v) {return (string.Join ("", v.ToString (). Select.) ((char n) => "rien ne trie pent pent hex sept oct enn" .Split () [n -'0 '])) + "ium"). Remplacez ("nnn", "nn"). Remplacez ("ii", "i") + "" + string.Join ("", v.ToString () .Select ((char n) => "nubtqphsoe" [n-'0 '])); }Cette approche prend l'int, convertit en chaîne, puis effectue une sélection de caractères LINQ qui se déclenche avec un lambda.
Le lambda génère un tableau à la volée (moins de caractères que sa définition) en scindant la chaîne de préfixes. Il extrait ensuite l'index du préfixe à utiliser en regardant la valeur int du caractère actuel (astuce n-'0 'mentionnée ci-dessus).
Tout cela est enveloppé dans une chaîne.Join qui concatène tous les résultats LINQ ensemble. Cliquetez sur le "ium", puis quelques déclarations. Remplacez à la fin pour nettoyer les nnn 'et ii.
Ajout de la sortie de symbole manquante. Je pense qu'il existe un moyen plus efficace de fusionner les deux LINQ, mais il est trop tard pour continuer à le fouiller.
la source
n-'0'
, pourquoi pasn-30
?C,
210204unennennium (199) octetsCela nécessite ASCII en tant que jeu de caractères d'exécution.
J'ai essayé une solution récursive (qui évite le besoin de
p
eto
) mais cela s'est avéré plus long.Je suis particulièrement fier / honte de l'matcher pour l'expression rationnelle
90|[23]$
, qui repose sur9
et0
étant le plus éloigné séparé chiffres (et donc la seule paire qui diffèrent par 9 - le39
dans le code est une conséquence d'j
être une valeur entière , et*n
encore une ASCII caractère) et que2
et3
diffèrent seulement dans le dernier bit, divisant par 2 les confond.Code développé:
Harnais de test:
la source
R, 278 octets
Pas le meilleur ... mais j'apprends toujours R alors j'ai pensé poster ma tentative. Des suggestions pour le rendre meilleur? Maintenant que j'y pense, il est probablement possible de créer un sous-ensemble sur la première ligne plutôt que de perdre de l'espace en créant des noms de ligne.
Exemple d'utilisation
Ungolfed
k
0-9
pour une identification facilex
, convertissez-la en caractère, divisez-la (par exemple, 137 en "1" "3" "7")k
basé sur l'entrée du numéro divisé et renvoyer les entrées-ium
k
Utilisez également une sous- chaîne pour extraire la première lettre des correspondances. Ceci est concaténé à la sortie de l'étape 5 avec un espace vide entre euxsub()
pour remplacer les motifsnnn
etii
la source
Javascript - 169 octets
Bizarrement, mes tentatives d'utiliser map ont été plus longues que la boucle for.
EDIT: Oups, j'ai oublié de vérifier la date.
la source
PHP, 131 + 1 octets (untriunium)
encore terriblement long:
Exécuter en pipe
-nR
ou essayer en ligne .la source
Python, 154 octets
la source