Diberi angka positif , temukan jumlah alkana dengan atom karbon , abaikan stereoisomer ; atau setara, jumlah pohon yang tidak berlabel dengan node, sehingga setiap node memiliki derajat .
Ini adalah urutan OEIS A000602 .
Lihat juga: Parafin - Kode Rosetta
Contoh
Untuk , jawabannya adalah , karena heptana memiliki sembilan isomer :
- Heptana :
- 2-Methylhexane :
- 3-Methylhexane :
- 2,2-Dimethylpentane :
- 2,3-Dimethylpentane :
- 2,4-Dimethylpentane :
Perhatikan bahwa 3-methylhexane dan 2,3-dimethylpentane adalah kiral , tetapi kami mengabaikan stereoisomer di sini.
Uji kasus
.
intput output
=============
0 1
1 1
2 1
3 1
4 2
5 3
6 5
7 9
8 18
9 35
10 75
11 159
12 355
13 802
14 1858
15 4347
16 10359
17 24894
18 60523
19 148284
20 366319
code-golf
sequence
combinatorics
chemistry
alephalpha
sumber
sumber
Jawaban:
CJam (
100 98 91 8983 byte)Mengambil input dari stdin, output ke stdout. Perhatikan bahwa ini mengeksploitasi lisensi untuk tidak menangani input
0
untuk menghemat dua byte dengan menguraikan definisi dariC
danD
. Demo onlineNB ini sangat lambat dan tidak efisien memori. Dengan memangkas array, versi yang jauh lebih cepat diperoleh (3 byte lebih banyak).Demo online .
Pembedahan
Saya memanipulasi ini menjadi dekomposisi yang sedikit lebih golf, dan kemudian mencari urutan menengah dan menemukan bahwa mereka juga di OEIS:
Versi sebelumnya menggunakan kembali blok
C
(menggabungkan dua polinomial) dari jawaban ini . Saya telah menemukan yang lebih pendek, tetapi saya tidak dapat memperbarui jawaban itu karena itu berasal dari pertanyaan rangkaian.sumber
Node.js 11.6.0 ,
229 223 221218 byteBerasal dari implementasi Java yang disarankan pada Rosetta Code .
Cobalah online!
sumber
Alchemist (1547 bytes)
Demo online .
Catatan: ini sangat lambat. Jika menguji dengan juru bahasa yang mendukung penerapan aturan beberapa kali sekaligus (mis. Yang saya pakai - walaupun pastikan Anda memiliki versi terbaru yang memperbaiki bug di parser) maka Anda bisa mendapatkan percepatan signifikan dengan menambahkan dua aturan:
yang sebaris rute melalui aturan yang ada
Diseksi sebagian
Pada level tinggi, ini menggunakan pendekatan yang sama dengan jawaban CJam saya.
Model perhitungan Alchemist pada dasarnya adalah mesin register Minsky . Namun, Alchemist dengan sangat baik mengekspos kesetaraan kode dan data, dan dengan memungkinkan banyak token di sisi kiri aturan produksi secara efektif negara tidak dibatasi untuk diwakili oleh satu atom: kita dapat menggunakan tupel atom, dan ini memungkinkan (non-rekursif) subrutin. Ini sangat berguna untuk golf. Satu-satunya hal yang benar-benar kurang adalah macro dan debuggability.
Untuk array saya menggunakan fungsi pairing yang dapat diimplementasikan dengan sangat golf di RM. Array kosong diwakili oleh0 , dan hasil dari prepending x ke array SEBUAH adalah ( 2 A + 1 ) 2x . Ada satu subrutin yang harus dipasangkan: subrutin ini disebut
P
dan menambahkan nilaie
keb
. Ada dua subrutin untuk tidakn
adil : tidak cocokb
untuke
danb
; dan tidakt
berpasangand
dengane
dand
. Ini memungkinkan saya untuk menyimpan sedikit pengocokan data antar variabel, yang penting: operasi "pemindahan" tunggalmemperluas setidaknya 17 byte:
di mana
S
keadaan saat ini danT
adalah keadaan selanjutnya. "Salinan" non-destruktif bahkan lebih mahal, karena harus dilakukan sebagai "perpindahan" dari dana
keb
pembantutmp
, diikuti dengan "perpindahan" daritmp
belakang kea
.Kebingungan
Saya alias berbagai variabel satu sama lain dan menghilangkan sekitar 60 negara dalam proses golf program, dan banyak dari mereka tidak memiliki nama yang sangat berarti, tetapi untuk sepenuhnya golf saya menulis sebuah minimiser sehingga nama-nama sekarang benar-benar tidak dapat diuraikan. Semoga berhasil, balikkan tekniknya! Berikut adalah minimiser (dalam CJam), yang membuat beberapa asumsi tentang kode tetapi dapat diadaptasi untuk meminimalkan program Alchemist lainnya:
sumber
Pari / GP , 118 byte
Sebuah terjemahan langsung dari Peter Taylor 's CJam jawabannya .
Cobalah online!
sumber