Tantangan Anda adalah untuk mencetak / mengeluarkan / mengembalikan teks ini:
_____ _____
| 1 | | 2 |
| H | | He |
|_____|_____ _____________________________|_____|
| 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 |
| Li | Be | | B | C | N | O | F | Ne |
|_____|_____| |_____|_____|_____|_____|_____|_____|
| 11 | 12 | | 13 | 14 | 15 | 16 | 17 | 18 |
| Na | Mg | | Al | Si | P | S | Cl | Ar |
|_____|_____|___________________________________________________________|_____|_____|_____|_____|_____|_____|
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
| K | Ca | Sc | Ti | V | Cr | Mn | Fe | Co | Ni | Cu | Zn | Ga | Ge | As | Se | Br | Kr |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
| 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
| Rb | Sr | Y | Zr | Nb | Mo | Tc | Ru | Rh | Pd | Ag | Cd | In | Sn | Sb | Te | I | Xe |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
| 55 | 56 | 57 \ 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
| Cs | Ba | La / Hf | Ta | W | Re | Os | Ir | Pt | Au | Hg | Tl | Pb | Bi | Po | At | Rn |
|_____|_____|_____\_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
| 87 | 88 | 89 / 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 |
| Fr | Ra | Ac \ Rf | Db | Sg | Bh | Hs | Mt | Ds | Rg | Cn | Nh | Fl | Mc | Lv | Ts | Og |
|_____|_____|_____/_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
____________________________________________________________________________________
\ 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 \
/ Ce | Pr | Nd | Pm | Sm | Eu | Gd | Tb | Dy | Ho | Er | Tm | Yb | Lu /
\_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____\
/ 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 /
\ Th | Pa | U | Np | Pu | Am | Cm | Bk | Cf | Es | Fm | Md | No | Lr \
/_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____/
Aturan:
- Jumlah baris kosong antara dua bagian bisa berapa saja (termasuk 0)
- Setiap baris dapat memiliki ruang prabayar dan penambahan selama dua bagian terlihat dengan benar dan bagian kedua indentasi setidaknya satu spasi lebih dari yang pertama.
- Anda mungkin menambahkan / menambahkan baris dan / atau spasi baru.
- Anda tidak boleh menggunakan tab untuk penspasian (selama tidak ada penerjemah yang menggantinya dengan spasi).
- Karena kesalahan saya, Anda dapat memilih untuk menggunakan
______ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____
sebagai baris pertama dari bagian kedua.
Data:
Anda dapat menggunakan teks ini sebagai referensi (tetapi bukan sebagai input):
Isi: simbol, nomor atom, grup, grup periode 8 & 9 dan periode 4-17 digunakan untuk bagian kedua.
H 1 1 1
He 2 18 1
Li 3 1 2
Be 4 2 2
B 5 13 2
C 6 14 2
N 7 15 2
O 8 16 2
F 9 17 2
Ne 10 18 2
Na 11 1 3
Mg 12 2 3
Al 13 13 3
Si 14 14 3
P 15 15 3
S 16 16 3
Cl 17 17 3
Ar 18 18 3
K 19 1 4
Ca 20 2 4
Sc 21 3 4
Ti 22 4 4
V 23 5 4
Cr 24 6 4
Mn 25 7 4
Fe 26 8 4
Co 27 9 4
Ni 28 10 4
Cu 29 11 4
Zn 30 12 4
Ga 31 13 4
Ge 32 14 4
As 33 15 4
Se 34 16 4
Br 35 17 4
Kr 36 18 4
Rb 37 1 5
Sr 38 2 5
Y 39 3 5
Zr 40 4 5
Nb 41 5 5
Mo 42 6 5
Tc 43 7 5
Ru 44 8 5
Rh 45 9 5
Pd 46 10 5
Ag 47 11 5
Cd 48 12 5
In 49 13 5
Sn 50 14 5
Sb 51 15 5
Te 52 16 5
I 53 17 5
Xe 54 18 5
Cs 55 1 6
Ba 56 2 6
La 57 3 6
Hf 72 4 6
Ta 73 5 6
W 74 6 6
Re 75 7 6
Os 76 8 6
Ir 77 9 6
Pt 78 10 6
Au 79 11 6
Hg 80 12 6
Tl 81 13 6
Pb 82 14 6
Bi 83 15 6
Po 84 16 6
At 85 17 6
Rn 86 18 6
Fr 87 1 7
Ra 88 2 7
Ac 89 3 7
Rf 104 4 7
Db 105 5 7
Sg 106 6 7
Bh 107 7 7
Hs 108 8 7
Mt 109 9 7
Ds 110 10 7
Rg 111 11 7
Cn 112 12 7
Nh 113 13 7
Fl 114 14 7
Mc 115 15 7
Lv 116 16 7
Ts 117 17 7
Og 118 18 7
Ce 58 4 8
Pr 59 5 8
Nd 60 6 8
Pm 61 7 8
Sm 62 8 8
Eu 63 9 8
Gd 64 10 8
Tb 65 11 8
Dy 66 12 8
Ho 67 13 8
Er 68 14 8
Tm 69 15 8
Yb 70 16 8
Lu 71 17 8
Th 90 4 9
Pa 91 5 9
U 92 6 9
Np 93 7 9
Pu 94 8 9
Am 95 9 9
Cm 96 10 9
Bk 97 11 9
Cf 98 12 9
Es 99 13 9
Fm 100 14 9
Md 101 15 9
No 102 16 9
Lr 103 17 9
Built-in yang memberikan info tentang tabel periodik elemen diperbolehkan tetapi harus dilihat secara terpisah dari solusi non-built-in.
Kode terpendek per bahasa menang!
code-golf
kolmogorov-complexity
dzaima
sumber
sumber
Jawaban:
Bubblegum , 535 byte
Menggunakan kompresi LZMA.
Cobalah online!
sumber
Excel VBA,
1.0231.020990983975595495 BytesPenuh
sub
rutin yang tidak mengambil input dan output tabel periodik ke kisaran[A1:R10]
padaActiveSheet
objek. Perhatikan bahwa karena Excel tidak dapat mengimplementasikan coretan pada batas, (sejauh yang saya tahu) implementasi ini menggunakan perbatasan berwarna merah untuk menunjukkan seri lantanida dan aktinida.-3 Bytes untuk Whitespace
-30 Bytes untuk mengubah
Range("A1:R10")
ke[A1:R10]
, menghapus spasi dari semuaa "some stuff"
panggilan, dan mengubah pembatas dari","
ke" "
-7 Bytes untuk diubah
Range("D6:D7,D9:D10,R9:R10")
menjadi[D6:D7,D9:D10,R9:R10]
-8 Bytes untuk mengubah dari alamat sel String ke
[...]
referensi sel yang dibungkus-380 Bytes berkat @Alexander (menghapus penomoran dari data dan menggunakan for for loop)
-100 byte untuk mengkonversi array ke
String
dan menggunakanMid
fungsiKeluaran
sumber
D6:D7
danD9:D10
JavaScript (ES6),
756750 bytePenjelasan:
a
berisi (diformat) Lantanida dan Aktinidaj
digunakan untuk melacak karakter mana yang digunakan untuk menggambar zig-zag dari Lantanida dan Aktinidai
hanyalah jumlah elemen berikutnya yang akan diformat. Meskipun tidak sepenuhnya diperlukan untuk memformat elemen dalam urutan, saya pikir ada penghematan byte kecil dalam melakukannya.r
adalah fungsi decoding run-length. Diharapkan akan dipanggil menggunakan parameter string template. Angka apa pun dalam string menyebabkan karakter sebelumnya diulang berkali-kali, misalnyar`_5`
sama dengan`_____`
(tetapi tentu saja 2 byte lebih pendek). Saya memang memiliki versi yang lebih canggih yang dapat menanganir`${i<100} `+i+r`${i++<10} `
tetapi ternyata lebih pendek untuk menjadikannya sebagai kasus khusus.f
adalah fungsi pemformatan elemen. Itu diharapkan akan dipanggil menggunakan parameter string template yang berisi elemen sebagai pasangan karakter (spasi diisi untuk nama elemen karakter tunggal). Array tiga string dikembalikan, satu untuk nomor elemen, satu untuk nama elemen, dan satu untuk garis bawah. Jika lebih dari satu elemen diformat, mereka bergabung dengan|
pemisah.g
adalah fungsi lem. Ia mengharapkan untuk dipanggil dengan tiga array (parameter kedua dan ketiga dapat berupa string jika hanya satu karakter yang diperlukan) dan mengembalikan satu array dengan semua string yang sesuai digabungkan bersama-sama.Tiga baris elemen pertama ditangani dengan menempelkan elemen yang diformat dari setiap sisi dengan jumlah ruang yang sesuai. Baris keempat dan kelima tidak membutuhkan lem. Baris keenam dan ketujuh ditangani dengan menempelkan elemen yang diformat dari setiap sisi dengan zigzag yang sesuai. 21 baris kemudian bergabung bersama dengan
|
batas dan baris baru. Sementara itu, 6 baris Lanthanides dan Actinides diberikan padding dan zigzag dan bergabung bersama dengan baris baru. Akhirnya potongan disatukan dengan elemen format yang diperlukan yang tersisa. Sunting: Disimpan 6 byte karena saya lupa mengganti baris baru literal setelah mengembangkan kode.Jika tabel lengkap dengan Lanthanides dan Actinides in situ dapat diterima, maka untuk 556 byte:
Penjelasan: String berisi daftar elemen dengan
-
dan baris ditambahkan sebagai elemen format. Sejumlah penggantian digunakan untuk mengubah daftar elemen menjadi tabel yang diinginkan.|
s.|
dihapus.-
s diganti dengan bantalan yang cukup untuk menghasilkan lebar 193 karakter._
s._
ditempatkan di atasnya (jika belum memilikinya)_
s bergabung dengan_
s.Saya mungkin bisa menyimpan beberapa byte lagi menggunakan metode padStart dan padEnd yang tersedia secara luas.
sumber
19_84 ``+a.map(s=>r`` 18
ke18_84 ``+a.map(s=>r`` 17
. Itu tidak mempengaruhi panjang kode.Ruby, 567
Membawa seri La / Ac lebih dekat ke tabel utama (membaca ulang aturan menyarankan itu diizinkan; mengatur ulang bagian pemformatan sehingga
d
digunakan segera ketika dihitung; dan baris berikutnya dihitung secara matematis alih-alih dengan regex.Ruby, 587
skor mengecualikan 3 baris baru yang tidak perlu ditambahkan untuk kejelasan
Penjelasan
Idenya adalah untuk menghasilkan yang berikut, kemudian memodifikasinya dengan menambahkan padding dan format yang benar, dan memindahkan lantanida dan aktinida ke bawah.
Kode yang dikomentari
sumber
a[r+15][18]=a[r+15][102]='\//'[r%2];a[r+23]=' '*18+a[r+15][18,85];a[r+15][18,84]=''
penghematan 83 byte, dan mungkina[22]=' '*18+?_*84
Di sisi lain saya harus meletakkan celah di baris 4 dan 5 di atas rare earths sehingga akan ada kode tambahan untuk itu. Sulit untuk mengatakan berapa skornya tanpa melakukannya tetapi akan lebih pendek.C,
141514011395136713451277115910521043 byteTerima kasih kepada @Conor O'Brien karena telah menghemat 6 byte!
Terima kasih kepada @ Zacharý karena telah menghemat
2290 byte!Berkat @gastropner untuk menyimpan
118225 bytes!Terima kasih kepada @ceilingcat untuk menghemat
89 byte!Cobalah online!
Belum dibuka (versi 1159 bytes):
sumber
printf(
kemunculan, berikut adalah tautan ke kode Anda dengan tiga kemunculan diganti denganP
makro: repl.it/Jeat/1#define
-ing;L;B
: repl.it/Jeat/305AB1E ,
517500494459458 byteCobalah online!
-Terima kasih terima kasih kepada Emigna
Munculkan derit kemenangan yang panjang ... Akan bermain golf lagi, tapi karena itu masih yang terpendek ...
Ide Dasar
Saya memetakan masing-masing kotak dengan digit pertama menjadi panjang nomor dan digit kedua menjadi panjang nama elemen. Gunakan ini untuk membuat kerangka (jika
.C
dan.B
tidak ada ini dengan mudah akan menjadi 300-400 byte):Inilah yang dicapai oleh paruh pertama kode ...
05AB1E , 229 byte
Cobalah online!
Melalui manipulasi satu kali yang jelek dan omong kosong lain yang seharusnya tidak ada, saya berhasil menyatukan seluruh kerangka.
Bagian selanjutnya pada dasarnya adalah "memasukkan string besar huruf dan angka yang mewakili elemen". Saya pada dasarnya hanya mengompresi, secara berurutan, semua surat:
Mendapatkan:
Anda kemudian melihat saya beralih mengganti semua simbol @ dengan huruf yang sesuai (pada akhirnya, setelah menempatkan mereka semua di posisi yang sesuai, itu memungkinkan saya untuk menggunakan "Judul Cased" untuk ibukota, karena setiap elemen dipisahkan oleh spasi putih).
Selanjutnya saya membuat string angka dan melakukan hal yang sama (terima kasih Emigna):
Hasil dalam:
Yang kemudian saya iterate dan ganti setiap # dengan.
Setelah ini, gangguan terakhir adalah tebasan ... Ya Tuhan ...
Kegagalan 50 byte ini adalah apa yang ingin saya perbaiki, bersama dengan beberapa hal kecil lainnya ... Jadi saya akan terus bermain golf, dan sampai saya memperbaiki hal-hal yang saya inginkan ini akan menjadi penjelasan informal.
sumber
0 36
untuk¾36
.104 118Ÿ
untukƵ3ƵHŸ
.90 103Ÿ
untuk90Ƶ2Ÿ
.žn•2ƒj#GÂjηCóÛƒüq™ôD ‡yΣ›aÎý1õçñ}ÂćÕ%…7¬vù~GÈž£_DвÌi¸7âòÜë8{~å≠’ˆ—d*^ݬ©Úì#Ï»cDYyÍæηмm¾/5ä):Ω8+“j¼[)ÿ—θ7I₆н¦ʒâÒ₂иofÞIa¥©ÂÛé/VÖt[¼m¦mćó,≠+ŒtC?8@Ú¬¼½k]αεßÁ'‡≠=aÔºø•51вè
.57L72 89Ÿ«Ƶ3ƵHŸ«58 71Ÿ«90Ƶ2Ÿ«J
PowerShell , 1562 byte
Pendekatan ini tidak optimal. Tidak dapat menggunakan tio karena ini memanfaatkan
[console]::setcursorposition
.sumber
SOGL V0.11 , 311 byte (tidak bersaing)
Butuh beberapa saat. Untuk membuat ini kompak, saya, dengan biaya jawaban yang tidak bersaing, menerapkan banyak hal ke dalam SOGL (sebagian besar sudah didokumentasikan). Terutama,
- "ž", yang menempatkan array di dalam array lain pada koordinat tertentu, dan
- "►" dan "◄" - run-length encode dan decode. Saya benar-benar berpikir saya telah mendokumentasikannya, tetapi saya rasa tidak.
Coba Di Sini! (kompresi (malas) diperbarui untuk mematuhi 0.12)
Jadi, penjelasan yang terlalu panjang di depan:
Bagian pertama: pengaturan
Bagian kedua: loop
Jadi sekarang hasilnya terlihat seperti ini .
Bagian ketiga: Pengaya
sumber
Bash, 728 byte
Diuji pada Ubuntu , membutuhkan program base64 dan xz
Penjelasan
LZMA (Lempel-Ziv-Markov chain-Algorithm) menghasilkan sekitar 0,5K arsip dengan tabel periodik.
Ini mengandung simbol yang tidak patut dicetak , dan tidak dapat digunakan langsung di konsol. Untuk menggunakannya saya mengkodekannya dengan Base64
Pengalihan aliran digunakan untuk memecahkan kode dan mengompresi arsip.
Trik
Untuk menghemat sekitar 30 byte saya menghapus baris baru dan beberapa spasi
sumber
base64 -D<<Q|xz -d
diikuti oleh kode base64 pada barisnya sendiri dan sebuah trailing Q).Excel VBA +,
674296293 byte (Pasti Menyontek)Terlalu menyenangkan dari solusi baru untuk tidak dibagikan.
Hancurkan celah standar ini
Sub
rutin yang tidak memerlukan input dan output tabel periodik keactivesheet
objek; Hardcoded untuk bekerja dengan 118 elemenTabel periodik ini termasuk
Kode
Keluaran
Versi Lama, 674 Bytes
Keluaran
sumber
Bubblegum , 600 byte
Cobalah online!
Anda dapat membalikkan hexdump ini dengan
xxd -r
.Ini adalah hasil Zopfliing teks 747 kali dalam format DEFLATE.
sumber
PHP, 758 Bytes
Setelah kesempatan yang sangat sedikit untuk mengurangi pendekatan array saya, saya memutuskan untuk bekerja hanya dengan string
Versi Online
Diperluas
PHP, 892 Bytes
Solusi kerja pertama yang berada di bawah hitungan byte dari versi kompres sebuah solusi dengan array
Versi online
PHP, 783 Bytes
Cobalah online!
Hanya menggunakan kompresi
PHP, 948 Bytes
sumber
GW-Basic, 598 bytes (file bertopen)
Sayangnya mode teks GW-Basic terbatas hingga 80 kolom. Saya mencoba memencet meja agar pas, tapi itu tidak terlihat terlalu menyenangkan jadi saya harus menggunakan mode grafis.
Di bawah ini adalah sumber teks, dengan garis melilit di 80 kolom untuk dibaca; berhati-hatilah bahwa agar program dapat bekerja ia harus disimpan dalam kode halaman 437. Jika Anda mencobanya, Anda akan menemukan itu akan berkedip - kedip saat sedang menggambar. Maaf.
GW-Basic tidak menyimpan file-nya seefisien mungkin, jadi untuk mendapatkannya hingga 660 byte Anda perlu membuka file token dalam editor dan secara manual menghapus semua spasi tetapi satu, akhir karakter file dan sampah karakter sebelumnya. Ini akan mengurangi ukurannya menjadi 660 byte dan masih akan memuat dan berjalan dengan baik.
Sunting: Karena dalam hal ini tidak masalah bahwa variabel adalah bilangan bulat, karena kesalahan yang diharapkan kecil dan operasi seperti
MOD
dan\
bulat pula, kami mungkin juga mengubahnya menjadi variabel titik mengambang, menyimpan%
token pada setiap penyebutan. Dan saya perhatikan jumlah itu35
terjadi cukup sering sehingga lima byte yang diperlukan untuk menyimpannya ke dalam variabel adalah layak (hanya!). Jika Anda telah menjaga skor, Anda akan melihat kami menyimpan 43 byte dan sistem file setuju: kami turun ke 617 byte.Sunting: Dengan sedikit mengubah
S$
saya dapat mencukur enam byte lagi:(K=0)*64+
menjadiAND 127
.Sunting: Oke, jadi saya ingat saya ingin mengubah cara saya menyimpan area kosong. Ini mencukur tujuh byte lagi, empat in
S$
dan tiga lebih karenaGOSUB 3:
ditukar keluar untuk>9
. Dan saya mengorbankan beberapa efisiensi untuk dua byte lagi.Sunting: Saya berhasil menembus pembatas 600 byte! Adalah satu hal untuk mendapatkan sesuatu yang ringkas dalam bahasa golf, tetapi hal lain untuk melakukannya dalam bahasa dunia nyata. Dan hal lain lagi jika Anda mengelolanya di GW-Basic dari semua hal.
S$
mendapat lima byte lebih besar, tapi aku menyelamatkan sembilan byte dengan menggantiASC(MID$(...))+I-95
denganI+1
dan menambahkanIF K=1 ... ELSE
pada baris1
.sumber
Kotlin ,
168816671664 byteMungkin menemukan beberapa perbaikan untuk menghemat byte. Tapi, membuatnya berfungsi jadi saya mempostingnya. Terima kasih mazzy selama 21 byte menyatakan u. 3 byte lagi menghapus string template dan menggunakan Anda secara langsung.
Cobalah online!
sumber
val u="_____"
sebelumfun Int.c()
dan 2. ganti semua kemunculan 5 garis bawah pada $ u. misalnyaif((r<2&&c>12)||(r==3&&c>2&&c<12))"_$u"
C (gcc) ,
623611 byteCobalah online!
Terima kasih gastropner untuk 2 byte (dan lebih banyak pemikiran) dan cailingcat selama 7 byte
sumber
e()
makro. Link.s[x/18*3+i<5|E(0)&4/7][x%18*6+i<5|E(0)&4%7]
sepertinya tidak memiliki arti yang samaBash + openssl + bzcat, 787 byte
Baris baru diperlukan. Output tabel periodik ke
stdout
.sumber
openssl enc -d -base64
denganbase64 -D
Powershell, byte
1077937934906902888878842784688677673667651596 bytePort of Neil's Javascript
Tambahkan
rv i,j,a
ke akhir skrip untuk dapatrestart
.Tidak disatukan
sumber
Retina , 888 byte
Cobalah online!
sumber
C ++, 866 byte
Versi tidak disatukan:
Python 3, 730 byte
sumber
/// ,
987958 byteCobalah online!
Saya mencoba
sumber
Kanvas , 289 byte
Coba di sini!
sumber
Teks , 3148 byte
Tenang, ini lelucon.
sumber