Anda dan teman Anda ingin saling mengirim pesan rahasia. Namun, karena Anda adalah ahli teori konspirasi dan berpikir bahwa pemerintah memiliki komputer kuantum yang dapat memecahkan semua enkripsi standar. Karena itu, Anda menciptakan salah satu dari Anda sendiri. Langkah pertama ini adalah sebagai berikut: mengambil string input, Anda memeriksa apakah semua huruf dapat diwakili oleh simbol untuk elemen-elemen tabel periodik (tidak sensitif huruf). Jika bisa, Anda mengganti setiap bagian dengan nama elemen yang dilambangkan simbol. Jika semua huruf tidak dapat diganti dengan cara ini, Anda cukup menggunakan string asli.
Tugas Anda:
Anda harus menulis program atau fungsi yang menyandikan pesan, seperti yang diuraikan sebelumnya. Ingat bahwa jika program Anda mengambil data dari sumber luar, ukuran sumber luar harus ditambahkan ke jumlah byte ( celah ini ). Elemen dan simbol yang digunakan ada di sini:
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
Memasukkan:
String yang akan dikodekan. Anda dapat mengambil ini dalam semua huruf besar atau huruf kecil jika Anda mau, selama Anda menentukan persyaratan itu dalam jawaban Anda.
Keluaran:
String, dikodekan seperti yang dijelaskan sebelumnya jika memungkinkan.
Contoh:
Hi! --> HydrogenIodine!
This is an example --> This is an example
Neon --> NeonOxygenNitrogen
Snip --> SulfurNitrogenIodinePhosphorus OR TinIodinePhosphorus
Nag --> NitrogenSilver
Mencetak:
Ini adalah kode-golf , kode terpendek dalam byte yang menang!
Jawaban:
Mathematica, 404 (239) byte
Menggunakan basis data bawaan Mathematica untuk mengambil nama elemen dan singkatannya. Input dapat dicampur huruf besar dan kecil dan disimpan dalam variabel
S
. Outputnya adalah hasil ekspresi, tidak dicetak secara eksplisit.Pada saat ini kode yang berfungsi penuh memakan 404 byte, karena basis data kimia Mathematica sedikit tertinggal.
ElementData[118, "Name"]
mengembalikanununoctium
bukanoganesson
(elemen super-berat di mana hanya baru-baru ini dinamai dengan benar, ununoctium adalah nama pengganti untuk elemen 118).Untuk memperbarui
ElementData
, saya membuka proteksi dan memperbaiki nilai untuk elemen Nihonium (113), Moscovium (115), Tennessine (118) dan Oganesson (118).Jika basis data Mathematica terkini, saya hanya akan membutuhkan 239 byte.
sumber
JavaScript (ES6),
881871 byteMengambil string input dalam semua huruf besar.
Kasus uji yang diperpanjang
Karena tantangan ini juga merupakan varian dari masalah set penutup yang tepat, saya telah menambahkan kasus uji berikut:
Tampilkan cuplikan kode
Bagaimana?
Optimasi awal
Kami mengabaikan 26 elemen berikut ini sepenuhnya, karena mereka dapat dengan aman diganti dengan dua simbol satu karakter di antara
BCFHIKNOPSUVWY
:Pengkodean dan penguraian elemen
Kami menggunakan daftar simbol elemen yang bertautan dalam huruf besar dan nama elemen dalam huruf kecil. Simbol selalu disimpan apa adanya, sedangkan nama dipersingkat sesuai dengan aturan berikut:
Contoh:
58 elemen yang memicu kedua aturan disimpan di awal daftar, diikuti oleh 27 elemen yang memicu aturan # 1 saja, diikuti oleh 7 elemen yang tidak memicu aturan apa pun.
Kami mendekode daftar ini untuk mengisi tabel pencarian o , di mana kuncinya adalah simbol dan nilainya adalah nama elemen yang diterjemahkan:
Menutupi string input
Kami mencoba mengganti semua huruf besar dalam string input dengan simbol elemen, menggunakan fungsi rekursif g () yang akhirnya mengembalikan string pengganti atau tidak terdefinisi jika tidak ditemukan sampul yang tepat:
sumber
Javascript,
148713511246117012431245 bytedisimpan 234 byte berkat @ musicman523
disimpan 174 byte berkat @ovs
disimpan 7 byte berkat @Shaggy
menambahkan 75 byte untuk membuatnya berfungsi untuk elemen 2 huruf
(Lebih sedikit) versi yang dapat dibaca:
sumber
on
. Juga, jika Anda ingin membuatnya lebih mudah dibaca manusia, gunakan lebih banyak delineator yang bisa dibaca daripada0
dan1
. Misalnya ada,;.!/-_:~ *|=+'"
.