pengantar
Dalam kimia ada jenis ekstensi, ekstensi .xyz, ( https://en.wikipedia.org/wiki/XYZ_file_format ), yang mencetak pada setiap baris elemen kimia, dan koordinat dalam bidang elemen. Ini sangat berguna bagi ahli kimia untuk memahami senyawa kimia dan memvisualisasikan senyawa dalam 3D. Saya pikir akan menyenangkan untuk, mengingat file .xyz, mencetak formula kimia.
Tantangan
Diberikan file .xyz, cetak rumus kimia senyawa dalam bahasa pemrograman apa pun dalam jumlah sekecil mungkin byte . catatan:
- Awalnya, input harus diberikan sebagai file. Seperti yang telah saya tunjukkan, ini membatasi tantangan. Oleh karena itu Anda dapat mengasumsikan input adalah daftar / array string, masing-masing mewakili baris file .xyz.
- Tidak ada batasan dalam pemesanan elemen.
- Setiap elemen harus dicetak dengan garis bawah "_" yang membatasi elemen dan berapa kali elemen itu muncul
- Dua baris pertama dari setiap file .xyz adalah jumlah elemen, dan baris komentar (ingatlah itu).
Contoh Input dan Output
Misalkan Anda memiliki file p.xyz yang berisi yang berikut (di mana baris pertama adalah jumlah elemen, dan yang kedua komentar), masukan:
5
A mystery chemical formula...
Ba 0.000 0.000 0.000
Hf 0.5 0.5 0.5
O 0.5 0.5 0.000
O 0.5 0.000 0.5
O 0.000 0.5 0.5
Keluaran:
Ba_1Hf_1O_3
Pengujian
Tes cepat dengan contoh yang disebutkan. Tes yang lebih menyeluruh adalah sebagai berikut: karena file uji adalah ribuan baris, saya akan membagikan file .xyz:
https://gist.github.com/nachonavarro/1e95cb8bbbc644af3c44
Jawaban:
Pyth - 18 byte
Cobalah online di sini .
sumber
Japt, 21 byte
Uji secara online! Input diberikan sebagai larik string (yang dapat diformat seperti pada tautan).
Tanpa penjelasan dan penjelasan
sumber
AWK, 44
Cobalah online.
sumber
Shell + GNU Utilities, 67
Cobalah online.
sumber
1d;2d
→1,2d
tail -n+3|cut -c-3|sort|uniq -c|sed -rz 's/\s*(\S+) (\S+)/\2_\1/g'
Mathematica,
7953 byteCukup sederhana.
sumber