Sie und Ihr Freund möchten sich gegenseitig geheime Nachrichten senden. Sie sind jedoch Verschwörungstheoretiker und glauben, dass die Regierung über einen Quantencomputer verfügt, der jede Standardverschlüsselung knacken kann. Deshalb erfinden Sie eine eigene. Der erste Schritt lautet wie folgt: Mit einer Eingabezeichenfolge prüfen Sie, ob alle Buchstaben durch die Symbole für die Elemente des Periodensystems dargestellt werden können (ohne Berücksichtigung der Groß- und Kleinschreibung). Wenn dies möglich ist, ersetzen Sie jeden Abschnitt durch den Namen des Elements, das das Symbol darstellt. Wenn nicht alle Buchstaben auf diese Weise ersetzt werden können, verwenden Sie einfach die ursprüngliche Zeichenfolge.
Deine Aufgabe:
Sie müssen ein Programm oder eine Funktion schreiben, die eine Nachricht codiert, wie zuvor beschrieben. Denken Sie daran, dass beim Abrufen von Daten von einer externen Quelle die Größe der externen Quelle zur Anzahl der Bytes hinzugefügt werden muss ( diese Lücke ). Die verwendeten Elemente und Symbole sind hier:
H Hydrogen
He Helium
Li Lithium
Be Beryllium
B Boron
C Carbon
N Nitrogen
O Oxygen
F Fluorine
Ne Neon
Na Sodium
Mg Magnesium
Al Aluminum
Si Silicon
P Phosphorus
S Sulfur
Cl Chlorine
Ar Argon
K Potassium
Ca Calcium
Sc Scandium
Ti Titanium
V Vanadium
Cr Chromium
Mn Manganese
Fe Iron
Co Cobalt
Ni Nickel
Cu Copper
Zn Zinc
Ga Gallium
Ge Germanium
As Arsenic
Se Selenium
Br Bromine
Kr Krypton
Rb Rubidium
Sr Strontium
Y Yttrium
Zr Zirconium
Nb Niobium
Mo Molybdenum
Tc Technetium
Ru Ruthenium
Rh Rhodium
Pd Palladium
Ag Silver
Cd Cadmium
In Indium
Sn Tin
Sb Antimony
Te Tellurium
I Iodine
Xe Xenon
Cs Cesium
Ba Barium
La Lanthanum
Ce Cerium
Pr Praseodymium
Nd Neodymium
Pm Promethium
Sm Samarium
Eu Europium
Gd Gadolinium
Tb Terbium
Dy Dysprosium
Ho Holmium
Er Erbium
Tm Thulium
Yb Ytterbium
Lu Lutetium
Hf Hafnium
Ta Tantalum
W Tungsten
Re Rhenium
Os Osmium
Ir Iridium
Pt Platinum
Au Gold
Hg Mercury
Tl Thallium
Pb Lead
Bi Bismuth
Po Polonium
At Astatine
Rn Radon
Fr Francium
Ra Radium
Ac Actinium
Th Thorium
Pa Protactinium
U Uranium
Np Neptunium
Pu Plutonium
Am Americium
Cm Curium
Bk Berkelium
Cf Californium
Es Einsteinium
Fm Fermium
Md Mendelevium
No Nobelium
Lr Lawrencium
Rf Rutherfordium
Db Dubnium
Sg Seaborgium
Bh Bohrium
Hs Hassium
Mt Meitnerium
Ds Darmstadtium
Rg Roentgenium
Cn Copernicium
Nh Nihonium
Fl Flerovium
Mc Moscovium
Lv Livermorium
Ts Tennessine
Og Oganesson
Eingang:
Eine zu codierende Zeichenfolge. Sie können dies in Groß- oder Kleinbuchstaben schreiben, wenn Sie dies wünschen, solange Sie diese Anforderung in Ihrer Antwort angeben.
Ausgabe:
Die Zeichenfolge, die nach Möglichkeit wie zuvor beschrieben codiert wurde.
Beispiele:
Hi! --> HydrogenIodine!
This is an example --> This is an example
Neon --> NeonOxygenNitrogen
Snip --> SulfurNitrogenIodinePhosphorus OR TinIodinePhosphorus
Nag --> NitrogenSilver
Wertung:
Dies ist Code-Golf , kürzester Code in Bytes gewinnt!
Antworten:
Mathematica, 404 (239) Bytes
Verwenden der in Mathematica integrierten Datenbank zum Abrufen von Elementnamen und deren Abkürzung. Die Eingabe kann in Klein- und Großbuchstaben gemischt werden und wird in der Variablen gespeichert
S
. Die Ausgabe ist das Ergebnis des Ausdrucks und wird nicht explizit gedruckt.Der derzeit voll funktionsfähige Code nimmt 404 Bytes ein, da die in Mathematica integrierte chemische Datenbank etwas zurückliegt.
ElementData[118, "Name"]
gibtununoctium
stattoganesson
(die superschweren Elemente, bei denen Ununoctium erst kürzlich richtig benannt wurde, war ein Platzhaltername für Element 118).Zum Aktualisieren
ElementData
hebe ich den Schutz auf und korrigiere die Werte für die Elemente Nihonium (113), Moscovium (115), Tennessine (118) und Oganesson (118).Wenn die Datenbank von Mathematica auf dem neuesten Stand wäre, würde ich nur 239 Bytes benötigen.
quelle
JavaScript (ES6),
881871 ByteNimmt die Eingabezeichenfolge in Großbuchstaben.
Erweiterte Testfälle
Da diese Herausforderung auch eine Variante des genauen Deckungssatzproblems ist, habe ich die folgenden Testfälle hinzugefügt:
Code-Snippet anzeigen
Wie?
Vorläufige Optimierung
Wir ignorieren die folgenden 26 Elemente vollständig, da sie sicher durch zwei Symbole eines Zeichens ersetzt werden können
BCFHIKNOPSUVWY
:Kodierung und Dekodierung der Elemente
Wir verwenden eine Interlaced-Liste von Elementsymbolen in Großbuchstaben und Elementnamen in Kleinbuchstaben. Symbole werden immer unverändert gespeichert, während Namen nach folgenden Regeln gekürzt werden:
Beispiele:
Die 58 Elemente, die beide Regeln auslösen, werden am Anfang der Liste gespeichert, gefolgt von den 27 Elementen, die nur Regel 1 auslösen, gefolgt von den 7 Elementen, die keine Regel auslösen.
Wir dekodieren diese Liste, um die Nachschlagetabelle o zu füllen , wobei die Schlüssel die Symbole und die Werte die dekodierten Elementnamen sind:
Abdeckung der Eingabezeichenfolge
Wir versuchen, alle Großbuchstaben in der Eingabezeichenfolge durch Elementsymbole zu ersetzen, indem wir die rekursive Funktion g () verwenden, die schließlich eine Ersatzzeichenfolge zurückgibt oder undefiniert ist, wenn keine genaue Abdeckung gefunden wird:
quelle
Javascript,
148713511246117012431245 Bytes234 Bytes dank @ musicman523 gespart
174 Bytes dank @ovs gespeichert
7 Bytes dank @Shaggy gespart
75 Bytes hinzugefügt, damit es für 2 Buchstabenelemente funktioniert
(Etwas mehr) lesbare Version:
quelle
on
. Wenn Sie die Lesbarkeit verbessern möchten, verwenden Sie auch besser lesbare Begrenzungslinien als0
und1
. ZB einer von,;.!/-_:~ *|=+'"
.