Saya baru saja mendapat pelajaran di sekolah tentang alkana dan mengira itu mungkin akan menjadi tantangan kode golf yang hebat! Jangan khawatir, ini tidak serumit kelihatannya!
Rehash Cepat
(Harap Dicatat: Untuk membuat singkat ini, tidak semua informasi 100% akurat.)
Alkana adalah rangkaian karbon dan hidrogen. Setiap atom karbon memiliki 4 ikatan, dan setiap atom hidrogen 1 ikatan. Semua atom karbon dari alkana membentuk string di mana setiap atom C terhubung ke 2 atom C lainnya (kiri dan kanan dalam struktur Lewis) dan 2 atom H (atas dan ke bawah), kecuali untuk ujung-ujung string , di mana atom-C terhubung hanya 1 C lain tetapi 3 Hs. Berikut adalah contoh dasar untuk pentana (alkana dengan 5 atom-C dan 12 atom-H):
H H H H H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Alkana juga dapat memiliki cabang. Tapi jangan khawatir, semua alkana dalam tantangan ini dapat diekspresikan dengan hanya 1 level percabangan. Contoh:
H
|
H-C-H
H H H | H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Untuk menyelesaikan tantangan ini, Anda juga harus memahami konvensi penamaan IUPAC untuk alkana bercabang. Pertama ada root alkane. Dalam contoh kita sebelumnya, ini akan menjadi bagian "CCCCC". Bergantung pada berapa lama rantai ini, ia memiliki nama yang berbeda. 1 C disebut metana, 2 C etana, 3 C propana, kemudian butana, pentana, heksana, heptana, oktan, nonan dan decana (10 C). Kemudian, untuk setiap cabang, ada awalan tertentu untuk itu: Pertama, ada indeks (offset) dari atom-C cabang ditambahkan ke (dihitung dari kiri). Dalam contoh, ini akan menjadi 4 (alias itu adalah atom C ke-4 dari kiri). Lalu ada tanda hubung (simbol ini: "-") dan setelah itu nama lain yang menunjukkan ukuran cabang. Penamaan ukuran cabang hampir sama seperti penamaan ukuran akar, Hanya saja alih-alih "ane" Anda menambahkan "yl". Dengan itu nama lengkap dari contoh itu akan menjadi
4-methylpentane
Jika Anda memiliki banyak cabang, maka cabang-cabang tersebut juga ditambahkan sebelumnya, dipisahkan oleh tanda hubung lainnya. Contoh:
2-butyl-5-methylhexane
Satu hal terakhir: jika Anda memiliki banyak cabang dengan ukuran yang sama, mereka dikelompokkan; offset mereka dipisahkan dengan koma dan mereka berbagi nama ukuran yang sama, yang akan ditukar dengan suku kata tambahan tergantung pada berapa banyak cabang yang dikelompokkan: "di" untuk 2 cabang, "tri" untuk 3 cabang, "tri" untuk 3, "tetra" untuk 4 (Anda tidak perlu lebih banyak untuk tantangan ini). Contoh:
2-ethyl-2,4,6-trimethyldecane
FYI, ini bisa terlihat seperti ini: (H-atom dihilangkan)
|
-C-
| |
-C- -C-
| | | | | | | | | |
-C-C-C-C-C-C-C-C-C-C-
| | | | | | | | | |
-C- -C-
| |
Lembar Informasi Tata Nama
Prefixes indicating numbers:
| Num | Prefix |
|------|--------|
| 1 | meth |
| 2 | eth |
| 3 | prop |
| 4 | but |
| 5 | pent |
| 6 | hex |
| 7 | hept |
| 8 | oct |
| 9 | non |
| 10 | dec |
Suffix root: ane
Suffix branch: yl
Prefixes grouping: di, tri, tetra
Aturan
Tulis sebuah program yang bertuliskan nama IUPAC dari STDIN, argumen atau ekuivalen program dan gambarkan sebagai struktur ASCII-art lewis menjadi STDOUT (atau setara).
- Untuk kesederhanaan, Anda TIDAK perlu menggambar atom-H (Jika tidak, Anda akan mengalami masalah spasi)
- Anda TIDAK diperbolehkan mencetak garis horizontal awal atau belakang kosong
- Rantai yang Anda harus parsing tidak akan lebih dari 10, dan maksimum cabang dalam "grup" dibatasi hingga 4.
- "Offset" maksimum cabang adalah 9 (artinya Anda tidak perlu menguraikan lebih dari 1 digit)
- Cabang Anda harus bergantian antara naik dan turun setelah setiap cabang baru. Jika ruang ini sudah diambil oleh cabang lain pada offset yang sama, Anda harus menggambarnya di sisi lain dari root. (atas-> bawah, bawah-> atas)
- Pada input yang korup, tidak diformat dengan benar, atau tidak dapat ditarik, program Anda mungkin berperilaku tidak spesifik.
Ini adalah kode golf, kode terpendek dalam byte menang!
Selamat bermain golf! :)
4-methylpropane
katakan4-methylpentane
?4-<anything>propane
sepertinya tidak mungkin, kecuali saya benar-benar salah memahami sesuatu.3-3-5-7-methyldodecane
karena rantai karbon kontinu terpanjang adalah 12 panjang. Juga, Anda mengatakan tidak semua info dalam pertanyaan itu akurat, tetapi saya pikir ada baiknya menunjukkan bahwa molekul kedua adalah2-methylpentane
, bukan4-methylpentane
karena Anda mulai pada karbon dengan percabangan terdekat.Your branches have to alternate between going up and down after every new branch.
contoh Anda melanggar aturan ini 2. Berapa panjang rantai maksimum yang harus kami dukung (menguraikan awalan akan menjadi bagian dari tantangan.) Anda harus menautkan (atau lebih disukai menyalin) daftar nomenklatur.Jawaban:
Python 2, 620 byte
Penjelasan
Memasukkan:
'2-ethyl-2,4,6-trimethyldecane'
Parsing pertama ke string dengan regex (grup terakhir adalah root):
[[[2], 2], [[2, 4, 6], 1], [[], 10]]
Setiap cabang ditulis dalam array panjang
len(root)
(Bolak-balik ditangani di sini):[[0, 0], [1, 2], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 0], [0, 0]]
Cabang string 'Kiri' dan 'Kanan' (
L,R
) dan 'root' (C
) diinisialisasi.Setiap cabang kemudian ditambahkan ke cabang 'string' yang sesuai (lingkaran besar).
Dua sisi dan tengah dicetak di bagian akhir:
sumber