Urutan Sylvester, OEIS A000058 , adalah urutan bilangan bulat yang didefinisikan sebagai berikut:
Setiap anggota adalah produk dari semua anggota sebelumnya ditambah satu. Anggota urutan pertama adalah 2.
Tugas
Buat program sekecil mungkin yang membutuhkan n dan hitung jangka waktu n dari Sylvester's Sequence. Input standar, output dan celah berlaku. Karena hasilnya tumbuh sangat cepat, Anda tidak diharapkan untuk mengambil istilah yang hasilnya akan menyebabkan meluapnya bahasa yang Anda pilih.
Uji Kasus
Anda dapat menggunakan nol atau satu pengindeksan. (Di sini saya menggunakan nol pengindeksan)
>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
n
mengembalikannth
jumlah urutan diterima?Jawaban:
Brain-Flak ,
7668585246 byteCobalah online!
Gunakan hubungan ini sebagai gantinya:
yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:
a(n+1) = a(n) * (a(n) - 1) + 1
.Penjelasan
Untuk dokumentasi tentang apa yang dilakukan setiap perintah, silakan kunjungi halaman GitHub .
Ada dua tumpukan di Brain-Flak, yang akan saya beri nama Stack 1 dan Stack 2.
Input disimpan di Stack 1.
Untuk algoritme pembangkitan:
Alternatif versi 46-byte
Ini hanya menggunakan satu tumpukan.
Cobalah online!
sumber
Jelly , 5 byte
Ini menggunakan pengindeksan berbasis 0 dan definisi dari spec tantangan.
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Hexagony , 27 byte
Dibuka:
Cobalah online!
Penjelasan
Mari kita perhatikan urutannya
b(a) = a(n) - 1
dan lakukan sedikit pengaturan ulang:Urutan ini sangat mirip tetapi kita bisa menunda kenaikan sampai akhir, yang terjadi untuk menyimpan byte dalam program ini.
Jadi di sini adalah kode sumber beranotasi:
Dibuat dengan HexagonyColorer Timwi .
Dan di sini adalah diagram memori (segitiga merah menunjukkan posisi awal dan orientasi pointer memori):
Dibuat dengan EsotericIDE Timwi .
Kode dimulai pada jalur abu-abu yang membungkus sudut kiri, jadi bit linear awal adalah sebagai berikut:
Kemudian kode mengenai
<
yang merupakan cabang dan menunjukkan awal (dan akhir) dari loop utama. Selama tepi N memiliki nilai positif, jalur hijau akan dieksekusi. Jalan itu membungkus grid beberapa kali, tetapi sebenarnya seluruhnya linier:The
.
tidak-ops, sehingga kode yang sebenarnya adalah:Setelah pengurangan ini berkurang
N
menjadi0
, jalur merah dijalankan:sumber
J,
181412 byteVersi ini berkat randomra. Saya akan mencoba menulis penjelasan terperinci nanti.
J, 14 byte
Versi ini berkat mil. Gunakan adverbia
^:
alih-alih agenda seperti di bawah ini. Penjelasan lebih lanjut akan datang.J, 18 byte
Diindeks 0.
Contohnya
Penjelasan
Ini adalah agenda yang terlihat seperti ini:
(Dihasilkan menggunakan
(9!:7)'┌┬┐├┼┤└┴┘│─'
kemudian5!:4<'e'
)Membusuk:
Menggunakan cabang atas sebagai gerund
G
, dan bagian bawah sebagai pemilihF
, ini adalah:Ini menggunakan fungsi konstan
2:
ketika0 = * n
, yaitu, ketika tanda nol (dengan demikiann
adalah nol). Jika tidak, kami menggunakan garpu ini:Yang satu ditambah seri di atas berikut:
Menguraikan lebih jauh, ini adalah produk (
*/
) lebih dari referensi-sendiri ($:
) lebih dari rentang (i.
).sumber
2(]*:-<:)^:[~]
14 byte menggunakan rumusa(0) = 2
dana(n+1) = a(n)^2 - (a(n) - 1)
. Untuk menghitung nilai yang lebih besar,2
permulaan harus ditandai sebagai integer yang diperluas.v`$:@.u
format rekursif. Saya selalu menggunakan^:v
format yang seringkali lebih kompleks. @miles Saya juga tidak pernah menggunakan(]v)
trik ini. Butuh 5 menit untuk mengerti.2(]*:-<:)~&0~]
(atau2:0&(]*:-<:)~]
). Dan menggabungkannya 13 byte]0&(]*:-<:)2:
.0&(]*:-<:)2:
. (Maaf, saya tidak boleh bermain golf di komentar.)Perl 6 , 24 byte
Penjelasan
Pemakaian:
sumber
$_
? Sihir apakah ini?Haskell, 26 byte
Contoh penggunaan:
f 4
->1807
.sumber
Java 7,
4642 byteMenggunakan pengindeksan 0 dengan rumus biasa. Aku bertukar
n*n-n
untukn*(n-1)
meskipun, karena Java tidak memiliki operator listrik berguna, danf()
panggilan mendapatkan panjang.sumber
f(n)*~-f(n)
harus bekerja.return--n<0
menghemat satu byte lagi.Haskell, 25 byte
sumber
SILOS , 60 byte
Cobalah online!
Pelabuhan jawaban saya di C .
sumber
Brain-Flak ,
158154 byteLeaky Nun membuatku mengalahkan di sini
Cobalah secara Online!
Penjelasan
Letakkan dua di bawah input a (0)
Sementara input lebih besar dari nol kurangi satu dari input dan ...
Diam-diam ...
Letakkan satu di tumpukan lain untuk bertindak sebagai katalis untuk perkalian <> (()) <>
Sementara tumpukan tidak kosong
Pindahkan bagian atas daftar dan salin
Lipat gandakan katalis dengan salinannya
Tambahkan satu
Pindahkan urutan kembali ke tumpukan yang tepat
Hapus semua kecuali item bawah (yaitu nomor terakhir yang dibuat)
sumber
C, 32 byte
Menggunakan pengindeksan berbasis 1. Uji di Ideone .
sumber
Sebenarnya , 9 byte
Cobalah online!
Gunakan hubungan ini sebagai gantinya:
yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:
a(n+1) = a(n) * (a(n) - 1) + 1
.sumber
R,
44 4241 byte2 byte menghemat berkat JDL
Hemat 1 byte berkat pengguna5957401
sumber
n
dijamin tidak negatif maka kondisinya bisa dikurangi darin>0
menjadi adiln
.f(n-1)
adalah 6 byte. Saya pikir Anda menyimpan byte dengan menetapkannya untuk sesuatu. yaituifelse(n,(a=f(n-1))^2-a+1,2)
Oasis , 4 byte (tidak bersaing)
Mungkin bahasa terakhir saya dari keluarga golf! Non-bersaing, karena bahasa tersebut mengungguli tantangan.
Kode:
Solusi alternatif berkat Zwei :
Versi yang diperluas:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
b<*>2
menggunakana(n-1)*(a(n-1)+1)-1
b
karena itu akan secara otomatis diisi (daripada input) :).Python,
3836 byte2 byte berkat Dennis.
Ide itu!
Menggunakan hubungan ini yang diubah dari yang disediakan dalam urutan sebagai gantinya:
a(n+1) = a(n) * (a(n) - 1) + 1
Penjelasan
0**n*2
mengembalikan2
kapann=0
dan0
sebaliknya, karena0**0
didefinisikan berada1
dalam Python.sumber
Cheddar , 26 byte
Cobalah online!
Idiomatik.
Penjelasan
sumber
CJam, 10 byte
Menggunakan pengindeksan berbasis 0. Cobalah online!
sumber
05AB1E , 7 byte
Dijelaskan
Menggunakan pengindeksan berbasis nol.
Cobalah online!
sumber
Prolog, 49 byte
sumber
SILOS 201 byte
Jangan ragu untuk mencobanya secara online!
sumber
Jelly , 7 byte
Cobalah online!
Menggunakan hubungan ini yang disediakan dalam urutan sebagai gantinya:
a(n+1) = a(n)^2 - a(n) + 1
Penjelasan
sumber
C, 46 byte
Ide itu!
Penggunaan
p
sebagai penyimpanan sementara produk.Pada dasarnya, saya mendefinisikan dua urutan
p(n)
danr(n)
, di manar(n)=p(n-1)+1
danp(n)=p(n-1)*r(n)
.r(n)
adalah urutan yang diperlukan.sumber
R,
50 4644 byteDaripada melacak seluruh urutan, kami hanya melacak produk, yang mengikuti aturan pembaruan kuadratik yang diberikan selama
n> 1n> 0. (Urutan ini menggunakan "mulai darisatukonvensi nol")Menggunakan start at zero convention menghemat beberapa byte karena kita dapat menggunakan if (n) daripada if (n> 1)
sumber
Ubur-ubur , 13 byte
Cobalah online!
Penjelasan
Mari kita mulai dari bawah ke atas:
Ini adalah pengait, yang mendefinisikan fungsi
f(x) = (x-1)*x
.Ini menyusun kait sebelumnya dengan fungsi kenaikan sehingga memberi kita fungsi
g(x) = (x-1)*x+1
.Akhirnya, ini menghasilkan fungsi
h
yang merupakan iterasi dari fungsi sebelumnyag
, sebanyak yang diberikan oleh input integer.Dan akhirnya, kami menerapkan iterasi ini ke nilai awal
2
. Itup
di atas hanya mencetak hasilnya.Alternatif (juga 13 byte)
Ini mempertahankan kenaikan sampai akhir.
sumber
C,
43,34, 33 byte1-diindeks:
Tes utama:
sumber
Brachylog , 13 byte
Cobalah online!
Gunakan hubungan ini sebagai gantinya:
yang berasal dari hubungan ini dimodifikasi dari yang disediakan dalam urutan:
a(n+1) = a(n) * (a(n) - 1) + 1
.sumber
Mathematica, 19 byte
Atau 21 byte:
sumber
Array
solusi ajaib. Sayang sekali,##0
bukan hal. ;)Labirin , 18 byte
Kredit untuk Sp3000 yang menemukan solusi yang sama secara mandiri.
Cobalah online!
sumber
Sebenarnya ,
1412 byteIni digunakan pengindeksan 0. Saran golf diterima. Cobalah online!
Tidak melakukan pelanggaran:
sumber
GolfScript ,
1210 byte2 byte berkat Dennis.
Cobalah online!
Penggunaan
a(n) = a(n-1) * (a(n-1)-1) + 1
.sumber
(
kependekan dari1-
;)
kependekan dari1+
.