Pertanyaan
Given the atomic number of an element
dalam kisaran [1-118] menghasilkan group and period
, dari unsur tersebut sebagaimana diberikan oleh Tabel Unsur Berkala berikut.
Untuk elemen dalam seri Lanthanide dan Actinide, (rentang [57-71] dan [89-103]), Anda harus kembali L
untuk Lanthanides dan A
untuk Actinides
Anda dapat menulis sebuah program atau fungsi dan menggunakan salah satu metode standar kami untuk menerima input dan memberikan output.
Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.
Uji Kasus
Karena hanya ada 118 input yang mungkin, daftar lengkap dari input dan output yang diharapkan diberikan di bawah ini.
Diciptakan dengan tangan, beri tahu saya jika ada kesalahan!
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
Mencetak gol
Golf kode sederhana . Jumlah byte terpendek menang
sumber
L
baik-baik saja. Sebenarnya itulah yang saya maksudkan. Tetapi karena CSV dikeluarkanL,
saya akan menerima keduanyaJawaban:
CJam ,
6459585654 byteTerima kasih kepada Dennis karena telah menghemat 2 byte.
Cobalah online!
Meninggalkan periode dan grup atau satu karakter di tumpukan.
Penjelasan
Ada dua ide utama di sini:
sumber
05AB1E ,
11310299 bytePenjelasan:
Cobalah online!
sumber
1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111
dapat mengurangi bytecount, jika tidak bagus!Mathematica, 77 byte
Ini juga akan sangat mudah digunakan
ElementData
untuk menentukan apakah input adalah Lantanida atau Aktinida, tetapi akan membutuhkan sekitar 20 byte lebih.sumber
Python 2 ,
205136 byte-26 byte berkat @Dead Possum
Cobalah online!
sumber
PHP, 144 byte
Catatan: menggunakan pengkodean IBM-850
Jalankan seperti ini:
Penjelasan
Periksa apakah input berada dalam kisaran untuk
L
atauA
; rentang "pengecualian". Kemudian modifikasi input untuk mengisi sel-sel yang hilang dalam kisi (atau singkirkan sel ekstra). Akhirnya, cetak pengecualian (kecuali yang salah0
) atau ubah posisi menjadi koordinat kisi.sumber
18<t7
. Apakah ini sesuatu yang saya lakukan salah? (berjalan di Mac El Capitan)ceil
) dengan "," untuk 1 byte tambahanJelly , 57 byte
Program lengkap yang mencetak output yang diinginkan.
Cobalah online! (Program sedikit dimodifikasi yang mencetak semua
input : output
dapat dilihat di sini ).Bagaimana?
Buat daftar dari 118 kemungkinan keluaran dan kemudian pilih entri pada indeks input.
Beberapa persiapan:
Program (disingkat dengan menggantikan
A
,B
, danC
):sumber
Perl5, 202 byte
sumber
Ruby, 130 byte
Pertama dapatkan 'A' dan 'L' dengan trik bitmask, kemudian coba masuk ke dalam persegi panjang 18 * 7 dan gunakan div / mod.
sumber
Python 2 , 137 byte
Cobalah online!
sumber
Python 2 , 115 byte
Cobalah online!
Idenya adalah untuk div-mod posisi grid untuk mendapatkan grup dan titik. Posisi kisi adalah input yang
n
disesuaikan dengan perpindahan untuk memperhitungkan kesenjangan dan kontraksi L / A. Ini diekstraksi dari daftar.Penanganan Lanthanide dan Actinide jelek. Ini ditugaskan perpindahan besar 200 dan 400 yang dapat dideteksi dengan
/200
. Saya ingin meletakkan karakterL
dan diA
sini, tetapi kemudiann+=...
akan menambahkan char ke nomor, memberikan kesalahan bahkan jikan
tidak digunakan. Jika tidak untuk pengindeksan 1,divmod
dapat digunakan untuk merujukn
hanya sekali, dan kemudian dapat diganti dengan ekspresinya,sumber
JavaScript (ES7),
10098 bytePenjelasan: Seri 'L' dan 'A' adalah casing khusus, menggunakan beberapa logika bitwise yang menyelamatkan saya 3 byte dari perbandingan langsung. Jika tidak, fungsi secara rekursif menemukan periode yang
p
berisi nomor atom yang diinginkan, jumlah elemen terakhir pada periode sebelumnyax
, dan jumlah elemen terakhir dalam periodey
yang dihitung setiap kali dengan mencatat perbedaannya adalah 2, 2, 8 , 8, 18, 18 yaitu berulang bilangan kuadrat ganda. Kelompok ini kemudian ditemukan dengan mengimbangi dari kiri atau kanan meja tergantung pada apakah elemen tersebut terletak di bawah Berilium-Skandium diagonal atau tidak.sumber
JavaScript (ES6), 136 byte
Uji
Tampilkan cuplikan kode
sumber
Python 2 ,
264227217 byteCobalah online!
Kurung terlalu banyak. Itu lebih mirip Brain-Flak.
sumber
while
luar fungsi? itu akan menghemat satu byte (spasi)while
loop sama sekali :)Excel, 192 byte
Jauh dari cantik. Pinjam dari jawaban Python yang ada
Berjuang untuk menangani kasus di mana
MOD(x,18)=0
untuk nilai Grup anggun.sumber
IF(A1<80
?Ruby, 116 byte
Berkomentar dalam program uji
sumber
PHP, 120 byte
mengambil input dari STDIN, jalankan dengan
-nR
.beberapa bitwise magic untuk Lanthanides dan Actinides,
the
$n-=
sebagian menambah dan mengurangi offset untuk kesenjangan dan Lantanida / Aktinida,sisanya adalah sederhana mod / div.
Port berulang dari jawaban Neil membutuhkan 108 byte :
sumber
Perl, 169 byte
Menggunakan:
sumber
Jelly ,
4943424139 byteCobalah online!
Latar Belakang
Dengan pengecualian lantanida dan aktinida, output akan terdiri dari bilangan bulat yang dinyatakan dalam basa bijective 18. Sebagai contoh, hidrogen sesuai dengan 19 10 = 11 b18 , helium menjadi 36 10 = 1I b18 , dan eka-radon / ununoctium / oganesson untuk 114 10 = 7I b18 .
Kita mulai dengan memetakan semua nomor atom yang kita bisa ke bilangan bulat yang sesuai, sementara memetakan lantanida dan aktinida dengan yang sesuai dengan lantanum ( 111 10 = 63 b18 ) dan actinium ( 129 10 = 73 b18 ).
Untuk melakukan ini, kami merekam perbedaan maju bilangan bulat yang mewakili atom. Misalnya, yang pertama adalah 1I B18 - 11 B18 = H B18 = 17 10 , yang kedua adalah 1 (seperti semua perbedaan antara unsur-unsur berturut-turut dari tabel periodik tidak dikembangkan), keempat ( B ke Be ) adalah 2D B18 - 22 B18 = B b18 = 11 10 , dan seterusnya. Untuk memetakan semua lantanida dan semua aktinida, kami akan menganggap semua perbedaan antara dua lantanida atau aktinida (misalnya, La ke Ce ) menjadi 0 .
Untuk mendapatkan bilangan bulat yang diinginkan untuk nomor atom n , yang harus kita lakukan adalah menambahkan 19 (hidrogen) ke perbedaan dan menghitung jumlah elemen n pertama dari vektor yang dihasilkan. Output kemudian hanya ditampilkan dalam basis bijective 18, kecuali ini akan menampilkan 6 3 (lantanida) atau 7 3 (aktinida). Dalam kasus terakhir, kami cukup mengganti hasil yang dihitung dengan L atau A .
Dibungkus untuk kewarasan horisontal, vektor kita harus menyandikan terlihat sebagai berikut.
Setelah pengodean run-length, kami mendapatkan yang berikut ini.
Untuk mengurangi ruang yang dibutuhkan untuk menyandikan vektor lebih banyak lagi, kita lepaskan paling kanan 1 (panjang) dan tambahkan 1 ke run.
Sekarang kita dapat secara reversibel mengubah susunan digit ini dari basis 45 ke integer.
Semua ini lebih kecil dari 250 , sehingga kami dapat mewakilinya dengan karakter dari halaman kode Jelly . Dikelilingi dengan
“
(awal harfiah) dan‘
(menafsirkan sebagai array integer), kita mendapatkan literal Jellyyang muncul kata demi kata dalam kode.
Bagaimana itu bekerja
sumber