IUPAC dalam kebijaksanaannya yang tak tertahankan telah menciptakan nama elemen sistematis untuk setiap elemen yang baru dibuat. Ini adalah nama sementara elemen hingga mereka akhirnya memutuskan tentang nama sebenarnya. Ini berfungsi seperti itu: setiap digit nomor elemen diberi awalan berdasarkan nilainya. Awalan disatukan dengan 'ium' di bagian akhir. Ketika ini selesai dan jika Anda mendapatkan dua kali lipat i (ii) atau triple n (nnn), gantilah dengan i tunggal dan n ganda. Simbol untuk elemen adalah huruf pertama dari setiap awalan yang digunakan digabungkan dan hasilnya dikapitalisasi. Awalan yang digunakan di bawah ini.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Jadi untuk golf ini, kode Anda perlu menghasilkan nama elemen dan simbolnya untuk bilangan bulat positif yang diberikan. Jadi, jika kode Anda diberikan 137, harus mencetak ke stdout atau mengembalikan keduanya untriseptium
dan Uts
. Itu harus valid dari setidaknya 118 hingga 558 . Yang lebih tinggi valid jika tidak menambah panjang kode Anda.
Contoh Python menunjukkan metode:
def elename(n):
'''Return name and symbol of new element for given element number.'''
prefixes=['nil','un','bi','tri','quad','pent','hex','sept','oct','enn']
nmeFixes, symFixes = [], []
while n: # each digit of element number is assigned a prefix
n, i = divmod(n, 10)
pf = prefixes[i]
symFixes.append(pf[0]) # symbol uses only first letter of prefix
nmeFixes.append(pf)
# loop assembled prefixes in reverse order
nmeFixes.reverse()
symFixes.reverse()
nmeFixes.append('ium') # suffix
name = ''.join(nmeFixes)
symb = ''.join(symFixes).capitalize()
# apply rule about too many n's or i's
name = name.replace('nnn','nn') # can happen with -90-
name = name.replace('ii','i') # -2ium or -3ium
return name, symb
Eric Towers menang dengan byte kadmium!
Jawaban:
Mathematica 10.1,
indium (49)cadmium (48)Solusi ini menggunakan pustaka bawaan elemen properti, termasuk nama dan singkatan IUPAC. (Saya belum melihat ini sebagai teknik yang harus dihindari dalam Golf. Tampaknya didorong. Tapi ini mungkin (mungkin lebih) tepi diterima - Mathematica mengimplementasikan perpustakaan ini (dan banyak lainnya) dengan mengunduh data dari Server Wolfram pertama kali Anda menggunakannya (dan saya kira sesekali memeriksa pembaruan).)
Bagaimana ini dibandingkan dengan menggunakan elements.py atau periodictable.py di Python?
Sunting: Berbulan-bulan kemudian: Melihat saya telah mengetikkan singkatan keluaran untuk 122. Saya telah menjalankan kembali kode dan memverifikasi bahwa saya membuat kesalahan ini, bukan Mathematica.
sumber
f
sendiri fungsi murni:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&
.Python 3, Unhexseptium (167) byte
Ini adalah hasil ketika program dijalankan pada setiap angka dari 1 hingga 999 (inklusif)
sumber
Pip ,
ThoriumActiniumRadon (86)(Jangan menghirup entri ini, itu akan memberi Anda kanker paru-paru.)
Mengambil nomor elemen sebagai argumen baris perintah dan menampilkan nama & singkatan pada baris terpisah.
Penjelasan (agak tidak ungolfed):
The
ii
dannnn
penanganan penggunaan pengganti regex dengan fungsi callback (ditambahkan dalam versi terbaru dari Pip): untuk setiap pertandinganii|nnn
, mengambil semua tapi karakter pertama dan digunakan sebagai pengganti.sumber
GNU sed, 171 (unseptunium)
Saya berasumsi tidak masalah bagaimana urutan nama dan simbol dikembalikan. Di sini, simbol yang lebih dulu:
sumber
g
; satu-satunya kasus adalahbiium
/triium
danennnil
, yang semuanya hanya dapat terjadi sekali dalam jumlah di bawah 1000.Mathematica, unhexunium
163161 bytesekarang menggunakan huruf besar simbol
Ini adalah Mathematica tanpa built-in
ElementData
.Tes pada 10 angka acak:
sumber
JavaScript (ES6) 164 (unhexquadium)
171Kapitalisasi adalah bagian yang sulit. (Uji dalam FireFox)
Edit 3 byte disimpan thx user2786485
sumber
*enium
bukan*ennium
untuk apa pun yang*9
[...n]
akan gagal untuk parameter int. Tantangannya adalah tentanga given positive integer
replace(/i(i)|n(nn)/g,'$1$2')
Ruby -
163156147143134 (Untriquadium) byteSaya berharap untuk bermain golf dengan cara ini
Sunting: Terima kasih untuk @steveverrill karena telah memangkas 9 byte!
Sunting2: Terima kasih untuk @steveverrill lagi untuk 4 byte lagi! (Solusi yang sangat pintar!)
sumber
each_char
Anda dapat menggunakanchars
. Menurut dokumentasi Ruby resmi, ini "usang" (tetapi tidak dalam codegolf!) Anda mungkin akan melakukan yang lebih baik denganeach_byte
ataubytes
kemudianc.to_i
menjadi misalnyai%48
. 2. Juga secara kebetulan\n
memiliki kode ascii 10, jadi mungkin Anda bisa menyingkirkanchop
dan memasukkannyaium
dalam array Anda (berfungsi bagus untuk nama elemen, tetapi menambahkani
simbol simbol elemen yang palsu .)tr_s
seperti ini:o=u='';gets.bytes{|c|k=%w[Nil un bI trI quad pent hex sept oct enN Ium][c%48];o+=k;u+=k[0]};puts o.tr_s('IN','in'),u[0..-2].downcase.capitalize
u.chop
lebih pendek dariu[0..-2]
. Mungkin saya seharusnya memposting jawaban saya sendiri, tetapi ide awal saya adalah melakukannya persis seperti yang Anda lakukan. Sangat menyenangkan membantu Anda bermain golf ini. Saya benar-benar merindukan bahwa Anda tidak perludowncase
sebelumnyacapitalize
.Pyth, 67 byte (Holmium)
Cobalah online di Pyth Compiler / Executor .
Bagaimana itu bekerja
sumber
JavaScript (ES6),
210202 Bytes (BiunniliumBinilbium)Minus octium (8) byte, terima kasih kepada @ edc65!
130 159 147 Bytes (Untrinilium Unpentennium Unquadseptium)Masukan seperti
f(324)
. Ugh, aku merasa sangat golf-y.sumber
CJam,
7472717069 byte (Thulium)Perhatikan bahwa kode tersebut mengandung karakter yang tidak dapat dicetak.
Terima kasih kepada @ Sp3000 karena menunjukkan kesalahan dalam revisi awal saya dan menyarankan
)/
pendekatannya.Cobalah secara online di interpreter CJam: .
Bagaimana itu bekerja
sumber
Matlab, 170 (Unseptnilium)
Bekerja pada semua input yang dapat Anda gunakan, mulai dari
nilium
hingga, sejauh yang Anda inginkan. Saya harusennennennennennennennennennennennennennennennennennennennennennennium
sebelum saya menyerah dengan menekan tombol 9.Dan sebuah penjelasan:
sumber
TI-BASIC,
223218 byteElemen nomor N hanya dapat memiliki tiga "n" jika berakhir dengan 90, dan hanya dapat memiliki dua "i" jika digit terakhir adalah 2 atau 3. Kami menggunakan matematika untuk memeriksa kasus-kasus tersebut.
Angka ajaib
1.5154
, yang menyimpan panjang setiap awalan, ditemukan menggunakan script Python untuk mencari semua desimal panjang ≤7 menggunakan fungsicosh(
,cos(
dane^(
.Belum bermain golf, tetapi huruf kecil dua byte TI-BASIC dan kurangnya perintah manipulasi string, seperti biasa, akan merusak nilai program ini.
sumber
Python 3, unpentadium (
156155154) byteAlih-alih mengganti
ii
dengani
kita rstrip apapuni
sebelum kita memperbaikiium
, karena itu satu-satunya sumber doublei
s yang mungkin. Demikian pula, kami menghapusn
dengan memeriksa suatuenn/nil
kasus.sumber
Retina,
206196186179 (Unseptenium) byte ( Cobalah online )Terima kasih kepada @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ) karena mengajari saya bahasa ini.
Terima kasih kepada @FryAmTheEggman untuk memotong 7 byte.
Versi byte-byte: di sini
Versi byte-byte: di sini
sumber
CJam, 95 byte
Cobalah online
Ini bersaing dalam kategori "bahasa tanpa regex, dan hanya menggunakan karakter yang dapat dicetak." ;) Tidak benar-benar mengharapkannya sesingkat beberapa solusi yang sudah diposting, tapi saya penasaran berapa lama akhirnya akan berakhir. Dan karena saya mendapatkannya sekarang, saya mungkin juga mempostingnya.
Penjelasan:
sumber
Go, 322 Bytes (tribibium)
Membaca tiga karakter dari STDIN, lebih banyak diabaikan, kurang menghasilkan crash. Jadi itu berfungsi untuk setiap angka antara
unnilnilium
danennennennium
.sumber
PowerShell,
170168165 (Unhexpentium)Cukup mudah dan tidak ada kejutan di sini. Kecuali mungkin saya memecahkan masalah kapitalisasi dengan casing yang lebih rendah semuanya kecuali bagian pertama dan memiliki bagian-bagian individu sudah dalam judul-kasus. Agresif diuraikan sekarang untuk menghindari kehilangan karakter untuk tugas variabel telanjang.
Bonus setelah perubahan terakhir: Sekarang berfungsi untuk nomor elemen yang lebih lama juga:
sumber
C pada x86, 192 (Unennbium)
Membaca angka dari
stdin
dan mencetak hasilnyastdout
. Mengandalkansizeof(char*) == sizeof(int)
.Versi tidak disatukan:
sumber
Haskell, bipentbium (
305271269265261259253252 bytes)Dicukur 34 byte, terima kasih kepada nimi.
sumber
nnn
danii
kasus ker
, yaitur('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=x
dan menyebutnya tanpa argumen:t=r.m.p
.concatMap
adalah>>=
, yaitup n=(n>>=(words"..."!!))++"ium "
GNU sed, unhexunium (161 bytes)
Saya menghasilkan simbol terlebih dahulu, kemudian menyimpannya di ruang pegang dan membuat nama. Sebuah loop lebih golf daripada menggunakan
/g
untuk empat atau lebih penggantian (kita hanya dapat memiliki satuii
dan / atau satunnn
, sehingga mereka tidak perlu berada di dalam loop, tetapi tidak sakit). Akhirnya, ambil dan tambahkan simbol yang ditahan.(NB Saya belum melihat jawaban sed yang ada ketika saya menulis ini)
Uji kasus
Ini menerapkan
ii
dannnn
aturan khusus:Dan yang konyol, menunjukkan berapa banyak yang diberikan kode ini, dibandingkan dengan dunia fisik:
sumber
T-SQL 329 byte
Diformat:
sumber
PHP, 152
153163bytes, unpentbiumYah, setidaknya PHP berada di sekitar rata-rata saat ini.
Menjalankan formulir perintah seperti:
Keluaran:
Tidak disatukan
Sunting
array()
-initializer dengan[]
'ium '
bukannya menggunakan gabungan tambahan.' '.
sumber
Perl, 109 (Unnilennium) byte
108 kode + 1 sakelar
Mengambil input dari STDIN sebagai satu nomor per baris.
sumber
Java 8 216Bytes
sumber
ii
dannnn
, seperti yang dijelaskan dalam pertanyaan. 3. Tujuan golf kode adalah membuat kode sesingkat mungkin. Jawabannya harus berisi skornya dalam judul. Anda dapat mengurangi skor Anda dengan menghilangkan spasi putih dan memperpendek nama variabel.C #
229 (Bibiennium)198 byte unennoctiumTrik "n-'0 '" adalah cara untuk mengkonversi dari ascii ke int. Char 9 = ASCII 57. Char 0 = ASCII 48, jadi 57-48 = 9.
static private string ToText (int v) {return (string.Join ("", v.ToString (). Pilih ((char n) => "nil un bi tri quad hex pent sept ok enn" .Split () [n -'0 '])) + "ium"). Ganti ("nnn", "nn"). Ganti ("ii", "i") + "" + string.Join ("", v.ToString () .Pilih ((char n) => "nubtqphsoe" [n-'0 '])); }Pendekatan ini mengambil int, mengkonversi ke string, kemudian melakukan pemilihan karakter LINQ yang melepaskan lambda.
Lambda menghasilkan array dengan cepat (lebih sedikit karakter daripada mendefinisikannya) dengan memisahkan string awalan. Itu kemudian menarik indeks awalan untuk digunakan dengan melihat nilai int karakter saat ini (trik n-'0 'yang disebutkan di atas).
Semua yang dibungkus dalam string. Bergabunglah yang menggabungkan semua hasil LINQ bersama-sama. Tack pada "ium", kemudian beberapa. Ganti pernyataan di akhir untuk membersihkan nnn 'dan ii's.
Menambahkan output simbol yang hilang. Saya pikir ada cara yang lebih efisien dengan menggabungkan dua LINQ, tapi ini cara terlambat untuk terus menyodoknya.
sumber
n-'0'
, mengapa tidakn-30
?C,
210204unennenium (199) byteIni membutuhkan ASCII sebagai set karakter runtime.
Saya memang mencoba solusi rekursif (yang menghindari kebutuhan untuk
p
dano
) tetapi ternyata lebih lama.Saya sangat bangga / malu dengan korek api untuk regexp
90|[23]$
, yang mengandalkan9
dan0
menjadi digit terpisah terjauh (dan oleh karena itu satu-satunya pasangan yang berbeda dengan 9 -39
dalam kode adalah konsekuensi darij
menjadi nilai integer dan*n
masih ASCII karakter) dan itu2
dan3
hanya berbeda pada bit terakhir, jadi bagi dengan 2 konfigurasikan.Kode yang diperluas:
Uji harness:
sumber
R, 278 byte
Bukan yang terbaik ... tapi saya masih belajar R jadi saya pikir saya akan memposting upaya saya. Ada saran untuk membuatnya lebih baik? Sekarang saya berpikir tentang hal itu mungkin untuk subset pada baris ke-1 daripada membuang-buang ruang untuk menciptakan nama-nama baris.
Contoh penggunaan
Tidak disatukan
k
0-9
untuk memudahkan identifikasix
, konversikan ke karakter, pisahkan (mis. 137 ke "1" "3" "7")k
berdasarkan input angka split dan mengembalikan entri-ium
k
menggunakan substring untuk menarik huruf pertama dari pertandingan. Ini digabungkan dengan output dari langkah 5 dengan ruang kosong di antara merekasub()
untuk menggantinnn
danii
polasumber
Javascript - 169 byte
Anehnya, upaya saya untuk menggunakan peta lebih lama dari pada for loop.
Sunting: Ups, lupa memeriksa tanggal.
sumber
PHP, 131 +1 byte (untriunium)
masih sangat panjang:
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Python, 154 byte
sumber