CJam, 87 83 82 80 byte
0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b5a/4a8**li<{[33:B_B*65_B*1]=\_B%8=B\#*+}/Bb0-`
Kode di atas mengandung karakter yang tidak patut dicetak.
Cobalah online di juru bahasa CJam . Jika tautan tidak berfungsi untuk Anda, salin dari tempel ini .
Latar Belakang
Untuk mendapatkan konfigurasi elektron dari atom ke- N , kita mulai dengan atom tanpa elektron dan menerapkan transformasi N untuknya.
Untuk mengurangi jumlah byte implementasi, kami merepresentasikan konfigurasi elektron suatu atom sebagai integer. Setiap digit bilangan bulat itu dalam basis 33 sesuai dengan jumlah elektron dalam kulit tertentu; digit paling signifikan mewakili kulit terluar.
Sebagai contoh, konfigurasi elektron Molybdenum (42) adalah [2 8 18 13 1] . Ini sesuai dengan bilangan bulat 2 × 33 4 + 8 × 33 3 + 18 × 33 2 + 13 × 33 + 1 = 26,79.370 .
Palladium (48) adalah kasus khusus, yang kami perlakukan sebagai [2 8 18 18 0] alih-alih [2 8 18 18] .
Representasi yang mudah ini mengurangi transformasi yang disebutkan di atas ke aritmatika sederhana:
R += 1
(tambahkan elektron ke kulit terluar)
R += 33
(tambahkan elektron ke kulit terluar kedua)
R += 65
(tambahkan dua elektron ke kulit terluar kedua; lepaskan satu dari yang pertama)
R += 1089
(tambahkan elektron ke kulit terluar ketiga)
R += 2145
(tambahkan dua elektron ke kulit terluar ketiga; lepaskan satu dari yang kedua)
R *= 33, R += 1
(tambahkan shell baru yang mengandung satu elektron)
Yang tersisa hanyalah meng-encode transformasi mana yang harus diterapkan untuk berpindah dari atom tertentu ke atom berikutnya. Perbedaan representasi bilangan bulat dari dua atom berturut-turut adalah sebagai berikut:
[1 1 65 1 1 1 1 1 1 1 2369 1 1 1 1 1 1 1 78401 1 33 33 33 65 1 33 33 33 65 1 1 1 1 1 1 1 2598017 1 33 33 65 33 1 65 33 65 1 1 1 1 1 1 1 1 85745345 1 33 1089 2145 1089 1089 1089 1089 33 2145 1089 1089 1089 1089 1089 33 33 33 33 33 33 33 65 33 1 1 1 1 1 1 1 2830095041 1 33 33 2145 1089 1089 2145 1089 33 2145 1089 1089 1089 1089 1089 65 1 33 33 33 33 33 33 65 1 1 1 1 1 1 1]
Perbedaan unik dalam array ini adalah sebagai berikut:
[1 33 65 1089 2145 2369 78401 2598017 85745345 2830095041]
Semua kecuali 5 yang pertama berhubungan dengan instance ketika shell baru ditambahkan; ini dapat dihilangkan karena mengalikan dengan 33 dan menambahkan 1 menghasilkan hasil yang sama seperti menambahkan perbedaan.
Karena kita harus menambahkan kulit baru jika dan hanya jika atom saat ini memiliki tepat delapan elektron di kulit luarnya (dengan pengecualian He (2) ↦ Li (3) , yang dapat dikodekan sebagai tambahkan 65 ), kita dapat menyandikan transformasi tersebut sebagai tambahkan 1 dan menentukan perlunya multiplikasi dengan cepat.
Jadi, jika kita definisikan
X := 0
I := 0
L := [33 1089 65 2145 1]
T := [1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 3 1 0 0 0 3 1 1 1 1 1 1 1 1 1 0 0 3 0 1 3 0 3 1 1 1 1 1 1 1 1 1 1 0 2 4 2 2 2 2 0 4 2 2 2 2 2 0 0 0 0 0 0 0 3 0 1 1 1 1 1 1 1 1 1 0 0 4 2 2 4 2 0 4 2 2 2 2 2 3 1 0 0 0 0 0 0 3 1 1 1 1 1 1 1]
konfigurasi elektron dari atom N dapat dihitung sebagai berikut:
while(X < N):
R *= (33 ** (R % 33 == 8))
R += L[T[X]]
X += 1
Bagaimana itu bekerja
" Push 0, the initial value of R; convert the following array into an integer by
considering it a base 256 number, then back to the array of its digits in base 6. ";
0"hTHøìð¼Ä¿håêÛ¾ªÔ¼"256b6b
" Replace each 5 in the resulting array by [4 4 4 4 4 4 4 4]. This yields the array T
from the above section. ";
5a/4a8**
" Read an integer N from STDIN and discard all but the first N elements of T. ";
li<
" For each element Y of the remainder of T, do the following: ";
{
[33:B_B*65_B*1]=\ " Define B := 33, push L, retrieve L[Y] and swap it with R. ";
_B%8=B\#* " Execute R *= 33 ** (R % 33 == 8). ";
+ " Execute R += L[Y]. ";
}/
" Convert R into the array of its digits in base 33, remove eventual zeros (Palladium)
and replace the resulting array with its string representation. ";
Bb0-`
Contoh dijalankan
$ base64 -d > electrons.cjam <<< MCJoVEgM+OzwErzEGL9o5erbvqrUB4YZhrwRIjI1NmI2YjVhLzRhOCoqbGk8e1szMzpCX0IqNjVfQioxXT1cX0IlOD1CXCMqK30vQmIwLWA=
$ cksum electrons.cjam
3709391992 80 electrons.cjam
$ for i in {1..118}; do LANG=en_US cjam electrons.cjam <<< $i; echo; done
[1]
[2]
[2 1]
[2 2]
[2 3]
[2 4]
[2 5]
[2 6]
[2 7]
[2 8]
[2 8 1]
[2 8 2]
[2 8 3]
[2 8 4]
[2 8 5]
[2 8 6]
[2 8 7]
[2 8 8]
[2 8 8 1]
[2 8 8 2]
[2 8 9 2]
[2 8 10 2]
[2 8 11 2]
[2 8 13 1]
[2 8 13 2]
[2 8 14 2]
[2 8 15 2]
[2 8 16 2]
[2 8 18 1]
[2 8 18 2]
[2 8 18 3]
[2 8 18 4]
[2 8 18 5]
[2 8 18 6]
[2 8 18 7]
[2 8 18 8]
[2 8 18 8 1]
[2 8 18 8 2]
[2 8 18 9 2]
[2 8 18 10 2]
[2 8 18 12 1]
[2 8 18 13 1]
[2 8 18 13 2]
[2 8 18 15 1]
[2 8 18 16 1]
[2 8 18 18]
[2 8 18 18 1]
[2 8 18 18 2]
[2 8 18 18 3]
[2 8 18 18 4]
[2 8 18 18 5]
[2 8 18 18 6]
[2 8 18 18 7]
[2 8 18 18 8]
[2 8 18 18 8 1]
[2 8 18 18 8 2]
[2 8 18 18 9 2]
[2 8 18 19 9 2]
[2 8 18 21 8 2]
[2 8 18 22 8 2]
[2 8 18 23 8 2]
[2 8 18 24 8 2]
[2 8 18 25 8 2]
[2 8 18 25 9 2]
[2 8 18 27 8 2]
[2 8 18 28 8 2]
[2 8 18 29 8 2]
[2 8 18 30 8 2]
[2 8 18 31 8 2]
[2 8 18 32 8 2]
[2 8 18 32 9 2]
[2 8 18 32 10 2]
[2 8 18 32 11 2]
[2 8 18 32 12 2]
[2 8 18 32 13 2]
[2 8 18 32 14 2]
[2 8 18 32 15 2]
[2 8 18 32 17 1]
[2 8 18 32 18 1]
[2 8 18 32 18 2]
[2 8 18 32 18 3]
[2 8 18 32 18 4]
[2 8 18 32 18 5]
[2 8 18 32 18 6]
[2 8 18 32 18 7]
[2 8 18 32 18 8]
[2 8 18 32 18 8 1]
[2 8 18 32 18 8 2]
[2 8 18 32 18 9 2]
[2 8 18 32 18 10 2]
[2 8 18 32 20 9 2]
[2 8 18 32 21 9 2]
[2 8 18 32 22 9 2]
[2 8 18 32 24 8 2]
[2 8 18 32 25 8 2]
[2 8 18 32 25 9 2]
[2 8 18 32 27 8 2]
[2 8 18 32 28 8 2]
[2 8 18 32 29 8 2]
[2 8 18 32 30 8 2]
[2 8 18 32 31 8 2]
[2 8 18 32 32 8 2]
[2 8 18 32 32 10 1]
[2 8 18 32 32 10 2]
[2 8 18 32 32 11 2]
[2 8 18 32 32 12 2]
[2 8 18 32 32 13 2]
[2 8 18 32 32 14 2]
[2 8 18 32 32 15 2]
[2 8 18 32 32 16 2]
[2 8 18 32 32 18 1]
[2 8 18 32 32 18 2]
[2 8 18 32 32 18 3]
[2 8 18 32 32 18 4]
[2 8 18 32 32 18 5]
[2 8 18 32 32 18 6]
[2 8 18 32 32 18 7]
[2 8 18 32 32 18 8]
GolfScript (96 byte)
Output dalam bentuk
Ini menggunakan string ajaib yang berisi karakter yang tidak dapat dicetak, jadi saya memberikan script dalam format xxd:
Untuk pengujian online, saya menulis string ajaib dengan lolos:
tapi itu setara ketika Anda tidak mengalami masalah menempelkan karakter ke dalam textareas browser.
Pendekatannya adalah membangun mesin virtual dengan 7 instruksi, yang masing-masing memanipulasi daftar jumlah elektron. Kemudian untuk elemen
n
kita mulai dengan daftar jumlah elektron0
dan menjalankann
instruksi pertama dari daftar yang dikodekan oleh string ajaib.Petunjuknya adalah:
1
)
\)\
+)
. (Ini hanya digunakan untuk paladium).+1
@)@@
@+\(2
bukan lebih lama@2+@(@
sumber
Python 2 (46 + 271 = 327)
Kode:
File
f
, berisi sampah biner berikut (ini adalah kode char)Base64:
Berdasarkan permintaan, ini sekarang merupakan program lengkap dan bukan fungsi.
Jawaban lama: Python (Garis dasar naif, 422):
Isi pos:
Dan tes cepat:
sumber
:I
f
sehingga saya bisa memperbanyaknya?print
sebagai kata kunci dan bukan fungsi).MATLAB -
248244241178 + 44 = 222 byteDiperkecil:
Diperluas:
Ketergantungan File Biner (Nama file ' a '):
Saya percaya ini adalah "program lengkap" karena dapat dipanggil dari commandline, dibaca dari
stdin
dan di-output kestdout
.Ia menggunakan semacam bytecode dua instruksi untuk membangun konfigurasi elektron. Kedua instruksi tersebut adalah
dan
Instruksi dikodekan dalam dua array. Yang pertama menyimpan
D
argumen dalam semua kasus. Yang kedua menyimpanN
argumen atau0
untuk menunjukkanpulldown
instruksi, karenaN = 0
tidak pernah digunakan sebagai argumen.Urutan instruksi yang lengkap adalah:
Perlu dicatat bahwa 28 karakter dapat dihapus jika kita menggunakan set karakter spesifik MATLAB, tapi saya ingin solusi saya dapat diwakili sebagai plaintext di Stack Exchange, tanpa referensi file eksternal.Referensi file eksternal.
Output Sampel
39
:2 8 18 9 2
78
:2 8 18 32 17 1
117
:2 8 18 32 32 18 7
5
:2 3
sumber
Perl 5, 235 (234 +1 untuk -E)
Golf:
Catatan: dump hex disediakan di bagian bawah posting ini, karena beberapa string literal berisi karakter kontrol (yang dimasukkan melalui hex editor).
Tidak dikoleksi dengan komentar:
Hex Dump:
sumber
CJam,
309289 byteBekerja dengan mengganti run umum (misalnya,
2 8 18 32
) dengan bilangan bulat lebih besar dari 32 dan mempertimbangkan array dari semua konfigurasi nomor 38 basis, yang dikodekan dalam biner.Contoh dijalankan
sumber