Frage
Given the atomic number of an element
Geben Sie im Bereich [1-118] das Ergebnis group and period
dieses Elements aus, wie im folgenden Periodensystem der Elemente angegeben.
Für Elemente der Lanthaniden- und Actiniden-Reihe (Bereiche [57-71] und [89-103]) sollten Sie stattdessen L
für die Lanthaniden und A
für die Actiniden zurückkehren
Sie können ein Programm oder eine Funktion schreiben und eine unserer Standardmethoden zum Empfangen und Bereitstellen von Eingaben verwenden.
Sie können jede Programmiersprache verwenden , beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind.
Testfälle
Da es nur 118 mögliche Eingaben gibt, finden Sie unten eine vollständige Liste der erwarteten Ein- und Ausgaben.
Von Hand erstellt, lass es mich wissen, wenn ein Fehler vorliegt!
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
Wertung
Einfaches Code-Golf . Die kürzeste Anzahl von Bytes gewinnt
quelle
L
ist gut. Das ist eigentlich das, was ich beabsichtigt habe. Aber da die CSV ausgegeben wurde,L,
werde ich beide akzeptierenAntworten:
CJam ,
6459585654 BytesVielen Dank an Dennis für das Speichern von 2 Bytes.
Probieren Sie es online!
Lässt entweder Punkt und Gruppe oder ein einzelnes Zeichen auf dem Stapel.
Erläuterung
Hier gibt es zwei Hauptideen:
quelle
05AB1E ,
11310299 BytesErläuterung:
Probieren Sie es online!
quelle
1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111
kann den Bytecount verringern, ansonsten schön!Mathematica, 77 Bytes
Es wäre auch recht einfach zu
ElementData
bestimmen, ob es sich bei der Eingabe um ein Lanthanoid oder ein Actinoid handelt, aber es würde ungefähr 20 weitere Bytes benötigen.quelle
Python 2 ,
205136 Bytes-26 Bytes dank @Dead Possum
Probieren Sie es online!
quelle
PHP, 144 Bytes
Anmerkung: Verwendet die IBM-850-Codierung
Laufen Sie wie folgt:
Erläuterung
Überprüfen Sie, ob die Eingabe innerhalb der Bereiche für
L
oder liegtA
. die "Ausnahme" Bereiche. Ändern Sie dann die Eingabe, um die fehlenden Zellen im Raster zu füllen (oder entfernen Sie die zusätzlichen Zellen). Drucken Sie abschließend die Ausnahme aus (es sei denn, dies ist falsch0
) oder konvertieren Sie die Position in Gitterkoordinaten.quelle
18<t7
. Mache ich das falsch? (Laufen auf Mac El Capitan)ceil
) durch "," für 1 zusätzliches ByteJelly , 57 Bytes
Volles Programm, das die gewünschte Ausgabe druckt.
Probieren Sie es online! (Ein leicht modifiziertes Programm, das alle druckt
input : output
, ist hier zu sehen).Wie?
Erstellt eine Liste der 118 möglichen Ausgaben und wählt dann den Eintrag am Index der Eingabe aus.
Einige vorbereiten:
Das Programm (gekürzt durch Substitution
A
,B
undC
):quelle
Perl5, 202 Bytes
quelle
Ruby, 130 Bytes
Holen Sie sich zuerst das 'A' und 'L' mit dem Bitmaskentrick, dann versuchen Sie, in ein 18 * 7-Rechteck zu passen und verwenden Sie ein div / mod.
quelle
Python 2 , 137 Bytes
Probieren Sie es online!
quelle
Python 2 , 115 Bytes
Probieren Sie es online!
Die Idee ist, die Rasterposition zu div-modifizieren, um die Gruppe und den Zeitraum zu erhalten. Die Gitterposition ist die Eingabe
n
, die durch eine Verschiebung angepasst wird, um Lücken und die L / A-Kontraktion zu berücksichtigen. Diese werden aus einer Liste extrahiert.Die Handhabung von Lanthanoiden und Actinoiden ist hässlich. Diesen sind große Verschiebungen 200 und 400 zugeordnet, mit denen erkannt werden kann
/200
. Ich möchte die ZeichenL
undA
hiern+=...
einfügen, füge dann aber ein Zeichen zu einer Zahl hinzu und gebe einen Fehler, auch wenn diesern
nicht verwendet wird. Wenn nicht für die 1-Indizierung verwendet werdendivmod
könnte, umn
nur einmal zu verweisen , und dann könnte es durch seinen Ausdruck ersetzt werden,quelle
JavaScript (ES7),
10098 BytesErläuterung: Die Reihen 'L' und 'A' sind mit einem speziellen Gehäuse versehen, wobei eine bitweise Logik verwendet wurde, die mir 3 Bytes gegenüber direkten Vergleichen ersparte. Andernfalls findet die Funktion rekursiv die Periode,
p
die die gewünschte Ordnungszahl enthält, die Nummer des letzten Elements in der vorherigen Periodex
und die Nummer des letzten Elements in der Periodey
, die jedes Mal berechnet wird, indem festgestellt wird, dass die Differenzen 2, 2, 8 sind , 8, 18, 18 dh wiederholte doppelte Quadratzahlen. Die Gruppe wird dann durch Versetzen von links oder rechts von der Tabelle gefunden, je nachdem, ob das Element unter der Beryllium-Scandium-Diagonale liegt oder nicht.quelle
JavaScript (ES6), 136 Byte
Prüfung
Code-Snippet anzeigen
quelle
Python 2 ,
264227217 BytesProbieren Sie es online!
Viel zu viele Klammern. Es sieht eher aus wie Brain-Flak.
quelle
while
außerhalb der Funktion platzieren? es würde ein Byte (Leerzeichen) sparenwhile
Schleife insgesamt loszuwerden :)Excel, 192 Bytes
Weit davon entfernt, hübsch zu sein. Entlehnt sich aus vorhandenen Python-Antworten
Kämpfen, um den Fall zu behandeln, in dem
MOD(x,18)=0
für die Gruppe Wert anmutig.quelle
IF(A1<80
?Ruby, 116 Bytes
Kommentiert im Testprogramm
quelle
PHP, 120 Bytes
Nimmt Eingaben von STDIN, laufe mit
-nR
.etwas bitweise Magie für die Lanthaniden und Actiniden,
der
$n-=
Teil addiert und subtrahiert Offsets für die Lücken und Lanthaniden / Actiniden,der Rest ist einfach mod / div.
Ein iterativer Port von Neils Antwort benötigt 108 Bytes :
quelle
Perl, 169 Bytes
Verwenden von:
quelle
Jelly ,
4943424139 BytesProbieren Sie es online!
Hintergrund
Mit Ausnahme von Lanthanoiden und Actinoiden wird die Ausgabe aus einer ganzen Zahl bestehen, die in der bijektiven Basis 18 ausgedrückt wird. Beispielsweise entspricht Wasserstoff 19 10 = 11 b18 , Helium 36 10 = 1 I b18 und Eka-Radon / Ununoctium / Oganesson bis 114 10 = 7I b18 .
Wir beginnen mit der Zuordnung aller uns zur Verfügung stehenden Ordnungszahlen zu den entsprechenden ganzen Zahlen, während wir Lanthaniden und Actiniden denjenigen zuordnen , die Lanthan ( 111 10 = 63 b18 ) und Actinium ( 129 10 = 73 b18 ) entsprechen.
Dazu zeichnen wir die Vorwärtsdifferenzen der Ganzzahlen auf, die die Atome darstellen. Zum Beispiel ist die erste 1I b18 - 11 b18 = H b18 = 17 10 , die zweite ist 1 (wie alle Unterschiede zwischen aufeinanderfolgenden Elementen des nicht expandierten Periodensystems), die vierte ( B bis Be ) ist 2D b18 - 22 b18 = B b18 = 11 10 und so weiter. Um alle Lanthanoide und alle Actinoide abzubilden, betrachten wir alle Unterschiede zwischen zwei Lanthanoiden oder Actinoiden (z. B. La bis Ce ) als 0 .
Um die gewünschte ganze Zahl für eine Ordnungszahl n zu erhalten , müssen wir den Differenzen lediglich 19 (Wasserstoff) voranstellen und die Summe der ersten n Elemente des resultierenden Vektors berechnen . Die Ausgabe wird dann einfach in der bijektiven Basis 18 angezeigt, es sei denn, dies würde 6 3 (Lanthaniden) oder 7 3 (Aktiniden) anzeigen . Im letzteren Fall ersetzen wir einfach das berechnete Ergebnis mit L oder A .
Umwickelt für horizontale Vernunft sieht der Vektor, den wir codieren müssen, wie folgt aus.
Nach der Lauflängencodierung erhalten wir Folgendes.
Um den Raum zu reduzieren erforderlich , um den Vektor noch mehr zu kodieren, abzustreifen wir am weitesten rechts liegenden 1 ‚s (Längen) und füge 1 zu den Läufen.
Jetzt können wir diese Ziffernfelder reversibel von Basis 45 in ganze Zahlen konvertieren.
Alle diese Werte sind kleiner als 250 , sodass wir sie mit Zeichen aus Jellys Codepage darstellen können . Umgeben von
“
(wörtlicher Start) und‘
(interpretiert als Integer-Array) erhalten wir das Jelly-Literaldas erscheint wörtlich im Code.
Wie es funktioniert
quelle