Die IUPAC hat in ihrer unerträglichen Weisheit einen systematischen Elementnamen für jedes neu erstellte Element erstellt. Dies ist der temporäre Name eines Elements, bis sie sich endgültig über einen tatsächlichen Namen entschieden haben. Das funktioniert so: Jeder Ziffer einer Elementnummer wird anhand ihres Wertes ein Präfix zugewiesen. Die Präfixe werden am Ende mit 'ium' verkettet. Wenn dies erledigt ist und Sie doppelte i (ii) oder dreifache n (nnn) erhalten, ersetzen Sie sie durch einzelne i und doppelte n. Das Symbol für das Element ist der erste Buchstabe jedes verwendeten Präfixes, verkettet und das Ergebnis großgeschrieben. Die verwendeten Präfixe sind unten.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Daher muss Ihr Code für diesen Golf sowohl den Elementnamen als auch das Symbol für eine bestimmte positive Ganzzahl generieren. Wenn Ihr Code also mit 137 angegeben wurde, sollte er auf stdout gedruckt werden oder beide untriseptium
und zurückgeben Uts
. Es sollte mindestens von 118 bis 558 gültig sein . Jeder höhere Wert ist gültig, wenn er die Länge Ihres Codes nicht erhöht.
Python-Beispiel mit der Methode:
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 gewinnt mit Cadmiumbytes!
Antworten:
Mathematica 10.1,
Indium (49)Cadmium (48)Diese Lösung verwendet eine integrierte Bibliothek mit Elementeigenschaften, einschließlich IUPAC-Namen und Abkürzungen. (Ich habe dies nicht als eine Technik gesehen, die beim Golfspielen vermieden werden sollte. Es scheint ermutigt zu sein. Aber dies könnte (vielleicht) am Rande des Akzeptablen liegen. Mathematica implementiert diese Bibliothek (und viele andere) durch Herunterladen von Daten von Wolframs Server, wenn Sie ihn zum ersten Mal verwenden (und ich gehe davon aus, dass gelegentlich nach Updates gesucht wird).
Inwiefern ist dies mit der Verwendung von elements.py oder periodictable.py in Python vergleichbar?
Bearbeiten: Monate später: Bemerkt, dass ich die Abkürzungsausgabe für 122 getippt habe. Ich habe den Code erneut ausgeführt und überprüft, dass ich diesen Fehler gemacht habe, nicht Mathematica.
quelle
f
selbst eine reine Funktion:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&
.Python 3, Unhexseptium (167) Bytes
Dies sind die Ergebnisse, wenn das Programm auf jeder Zahl von 1 bis 999 (einschließlich) ausgeführt wird.
quelle
Pip ,
ThoriumActiniumRadon (86)(Atme diesen Eintrag nicht ein, es wird dir Lungenkrebs geben.)
Nimmt die Elementnummer als Befehlszeilenargument und gibt den Namen und die Abkürzung in separaten Zeilen aus.
Erklärung (etwas ungolfed):
Das
ii
undnnn
-Verfahren verwendet einen regulären Ausdruck mit einer Rückruffunktion (in der neuesten Version von Pip hinzugefügt):ii|nnn
Nehmen Sie für jede Übereinstimmung von bis auf das erste Zeichen alle Zeichen und verwenden Sie sie als Ersatz.quelle
GNU sed, 171 (Unseptunium)
Ich gehe davon aus, dass es keine Rolle spielt, in welcher Reihenfolge der Name und das Symbol zurückgegeben werden. Hier steht das Symbol an erster Stelle:
quelle
g
; die einzigen Fälle wärenbiium
/triium
undennnil
, die alle nur einmal in Zahlen unter 1000 vorkommen können.Mathematica, Unhexunium
163161 BytesJetzt wird das Symbol groß geschrieben
Dies ist Mathematica ohne das eingebaute
ElementData
.Test auf 10 Zufallszahlen:
quelle
JavaScript (ES6) 164 (Unhexquadium)
171Die Großschreibung ist der schwierige Teil. (Test in Firefox)
Bearbeite 3 Bytes gespeichert als User2786485
quelle
*enium
*ennium
*9
[...n]
für einen int-Parameter fehl. Die Herausforderung geht uma given positive integer
replace(/i(i)|n(nn)/g,'$1$2')
Ruby -
163156147143134 (Untriquadium) BytesIch hoffe, dass ich auf diese Weise Golf spielen kann
Edit: Danke für @steveverrill für das Abschneiden von 9 Bytes!
Edit2: Danke nochmal für @steveverrill für weitere 4 Bytes! (Wirklich clevere Lösung!)
quelle
each_char
Ihnen können verwendenchars
. Laut offizieller Ruby-Dokumentation ist dies "veraltet" (aber nicht im Codegolf!). Du würdest es wahrscheinlich besser machen miteach_byte
oderbytes
dannc.to_i
wird es zum Beispieli%48
. 2.\n
Hat auch zufällig ASCII-Code 10, so dass Sie vielleicht das loswerdenchop
undium
in Ihr Array aufnehmen können (funktioniert hervorragend für den Elementnamen, fügt aberi
dem Elementsymbol ein falsches hinzu .)tr_s
wieo=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
ist kürzer alsu[0..-2]
. Vielleicht hätte ich meine eigene Antwort posten sollen, aber meine ursprüngliche Idee war, es genauso zu machen, wie Sie es getan haben. Es hat Spaß gemacht, Ihnen dabei zu helfen, Golf zu spielen. Ich habe völlig vermisst, dass du dasdowncase
vorher nicht brauchstcapitalize
.Pyth, 67 Bytes (Holmium)
Versuchen Sie es online im Pyth Compiler / Executor .
Wie es funktioniert
quelle
JavaScript (ES6),
210202 Bytes (BiunniliumBinilbium)Minusoctium (8) Bytes, danke an @ edc65!
130 159 147 Bytes (Untrinilium Unpentennium Unquadseptium)Eingabe wie
f(324)
. Ugh, ich fühlte mich so golfen.quelle
CJam,
7472717069 Bytes (Thulium)Beachten Sie, dass der Code nicht druckbare Zeichen enthält.
Vielen Dank an @ Sp3000 für den Hinweis auf einen Fehler in meiner ersten Überarbeitung und den Vorschlag für die
)/
Vorgehensweise.Versuchen Sie es online im CJam Interpreter: .
Wie es funktioniert
quelle
Matlab, 170 (Unseptnilium)
Funktioniert mit allen Eingängen, die Sie verwenden können, von
nilium
bis zu, so weit Sie wollen. Ich musste,ennennennennennennennennennennennennennennennennennennennennennennium
bevor ich mit dem Drücken der 9-Taste aufgab.Und eine Erklärung:
quelle
TI-BASIC,
223218 BytesElement Nummer N kann nur ein dreifaches "n" haben, wenn es mit 90 endet, und kann nur ein doppeltes "i" haben, wenn die letzte Ziffer 2 oder 3 ist. Wir verwenden Mathematik, um diese Fälle zu überprüfen.
Die magische Zahl
1.5154
, die die Länge jeden Präfix speichert, wurde mit einem Python - Skript gefunden alle Dezimalstellen von Länge suchen ≤7 mit den Funktionencosh(
,cos(
unde^(
.Das Golfen ist noch nicht abgeschlossen, aber die 2-Byte-Kleinbuchstaben von TI-BASIC und das Fehlen von Befehlen zur Manipulation von Zeichenfolgen beeinträchtigen die Punktzahl dieses Programms.
quelle
Python 3, unpentquadium (
156,155,154) BytesAnstatt sie zu ersetzen
ii
miti
wir rstrip allei
s , bevor wir auf die tackium
, da dies die einzige mögliche Quelle der Doppel isti
s. Ebenso entfernen wirn
s, indem wir nach einemenn/nil
Fall suchen .quelle
Retina,
206196186179 (Unseptennium) Bytes ( Online testen )Vielen Dank an @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ), der mir diese Sprache beigebracht hat .
Vielen Dank an @FryAmTheEggman für das Abhacken von 7 Bytes.
Ueh-Byte-Version: hier
Bnh-Byte-Version: hier
quelle
CJam, 95 Bytes
Probieren Sie es online aus
Dies konkurriert in der Kategorie "Sprachen ohne Regex und nur mit druckbaren Zeichen." ;) Habe nicht wirklich damit gerechnet, dass es so kurz ist wie einige der bereits geposteten Lösungen, aber ich war gespannt, wie lange es sowieso dauern würde. Und da ich es jetzt habe, kann ich es auch posten.
Erläuterung:
quelle
Los, 322 Bytes (Tribibium)
Liest drei Zeichen aus STDIN, mehr werden ignoriert, weniger führen zu einem Absturz. So funktioniert es für jede Zahl zwischen
unnilnilium
undennennennium
.quelle
PowerShell,
170168165 (Unhexpentium)Ziemlich unkompliziert und keine Überraschungen. Außer vielleicht, dass ich die Großschreibung dadurch gelöst habe, dass ich alles bis auf den ersten Teil klein geschrieben habe und die einzelnen Teile bereits in Titelbuchstaben geschrieben habe. Inzwischen agressiv integriert, um den Verlust von Zeichen bei Zuweisungen von Variablen zu vermeiden.
Bonus nach der letzten Änderung: Funktioniert jetzt auch für längere Elementnummern:
quelle
C auf x86, 192 (Unennbium)
Liest Ziffern aus
stdin
und druckt die Ergebnisse ausstdout
. Verlässt sich aufsizeof(char*) == sizeof(int)
.Ungolfed-Version:
quelle
Haskell, Bipentbium (
305271269265261259253252 Byte)34 Bytes weniger dank Nimi.
quelle
nnn
undii
Fälle inr
, das heißtr('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=x
und nennen es ohne Argumentet=r.m.p
.concatMap
is>>=
, iep n=(n>>=(words"..."!!))++"ium "
GNU sed, Unhexunium (161 Bytes)
Ich erstelle das Symbol, stelle es dann in den Laderaum und erstelle den Namen. Eine Schleife ist golfer als die Verwendung
/g
für vier oder mehr Ersetzungen (wir können nur eineii
und / oder eine habennnn
, so dass sie nicht in der Schleife sein müssen, aber es tut nicht weh). Abschließend rufen Sie das angehaltene Symbol ab und hängen es an.(NB ich hatte die existierende sed Antwort nicht gesehen, als ich dies schrieb)
Testfälle
Diese üben die
ii
undnnn
Sonderregeln aus:Und eine lächerliche, die zeigt, wie viel mehr dieser Code im Vergleich zur physischen Welt gibt:
quelle
T-SQL 329 Bytes
Formatiert:
quelle
PHP, 152
153163Bytes, unpentbiumZumindest ist PHP diesmal ungefähr durchschnittlich.
Führt die Formularbefehlszeile wie folgt aus:
Ausgabe:
Ungolfed
Bearbeiten
array()
-initializer mit[]
'ium '
stattdessen eine zusätzliche Verkettung verwendet wird.' '.
quelle
Perl, 109 (Unnilennium) Bytes
108 Code + 1 Schalter
Übernimmt die Eingabe von STDIN als eine Nummer pro Zeile.
quelle
Java 8 216Bytes
quelle
ii
undnnn
, wie in der Frage erläutert. 3. Das Ziel von Code Golf ist es, den Code so kurz wie möglich zu halten. Die Antwort sollte ihre Punktzahl im Titel enthalten. Sie können Ihre Punktzahl verringern, indem Sie Leerzeichen entfernen und den Variablennamen verkürzen.C #
229 (Bibiennium)198 Unennoctium-BytesDer "n-'0 '" - Trick ist eine Möglichkeit, von ASCII zu Int zu konvertieren. Char 9 = ASCII 57. Char 0 = ASCII 48, also 57-48 = 9.
statischer privater String ToText (int v) {return (string.Join ("", v.ToString (). Select ((char n) => "kein dreifacher Quad-Pent-Hex-Sept-Okt-En" .Split () [n -'0 '])) + "ium"). Replace ("nnn", "nn"). Replace ("ii", "i") + "+ string.Join (" ", v.ToString () .Select ((char n) => "nubtqphsoe" [n-'0 '])); }Dieser Ansatz nimmt das int, konvertiert es in einen String und führt dann eine LINQ-Auswahl von Zeichen durch, die ein Lambda auslösen.
Das Lambda generiert ein Array im laufenden Betrieb (weniger Zeichen als definiert), indem die Zeichenfolge der Präfixe aufgeteilt wird. Anschließend wird der Index des zu verwendenden Präfixes ermittelt, indem der int-Wert des aktuellen Zeichens (der oben erwähnte Trick n-'0 ') betrachtet wird.
Alles, was in einen String eingeschlossen ist. Join, der alle LINQ-Ergebnisse zusammenfasst. Tack on the "ium", dann ein paar .Replace-Anweisungen am Ende, um die nnn 'und ii's zu bereinigen.
Fehlende Symbolausgabe hinzugefügt. Ich denke, es gibt eine effizientere Möglichkeit, die beiden LINQs zusammenzuführen, aber es ist viel zu spät, um weiter daran zu arbeiten.
quelle
n-'0'
, warum nichtn-30
?C
210204unennennium (199) BytesDies erfordert ASCII als Laufzeitzeichensatz.
Ich habe versucht, eine rekursive Lösung (die die Notwendigkeit von
p
und vermeideto
), aber das stellte sich länger heraus.Ich bin besonders Stolz / schämt der Matcher für den regulären Ausdruck
90|[23]$
, der auf beruht9
und0
wobei die am weitesten Ziffern getrennt sind (und daher das einzige Paar , das von 9 unterscheiden - die39
in dem Code ist eine Folge derj
ein ganzzahliger Wert ist , und*n
immer noch ein ASCII Zeichen) und das2
und3
unterscheiden sich nur im letzten Bit, so dass die Division durch 2 sie verschmilzt.Erweiterter Code:
Testgeschirr:
quelle
R 278 Bytes
Nicht die beste ... aber ich lerne immer noch R, also dachte ich, ich würde meinen Versuch posten. Irgendwelche Vorschläge, um es besser zu machen? Nun, da ich darüber nachdenke, ist es wahrscheinlich möglich, die n-1-Zeile zu unterteilen, anstatt Platz für die Erstellung von Zeilennamen zu verschwenden.
Anwendungsbeispiel
Ungolfed
k
0-9
zur einfachen Identifizierung einx
, in Zeichen konvertieren, aufteilen (zB 137 auf "1" "3" "7")k
basierend auf der eingegebenen Teilzahl und Rückgabe der Einträge-ium
k
mit Teilzeichenfolge, um den ersten Buchstaben der Übereinstimmungen abzurufen. Dies wird mit einem Leerzeichen dazwischen mit der Ausgabe von Schritt 5 verkettetsub()
, um die Musternnn
und zu ersetzenii
quelle
Javascript - 169 Bytes
Seltsamerweise waren meine Versuche, map zu verwenden, länger als die for-Schleife.
EDIT: Hoppla, ich habe vergessen, das Datum zu überprüfen.
quelle
PHP, 131 + 1 Byte (untriunium)
immer noch furchtbar lang:
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .quelle
Python, 154 Bytes
quelle