Urutan Stern-Brocot adalah urutan seperti Fibonnaci yang dapat dibangun sebagai berikut:
- Inisialisasi urutan dengan
s(1) = s(2) = 1
- Atur penghitung
n = 1
- Tambahkan
s(n) + s(n+1)
ke urutan - Tambahkan
s(n+1)
ke urutan - Bertambah
n
, kembali ke langkah 3
Ini setara dengan:
Di antara sifat-sifat lain, urutan Stern-Brocot dapat digunakan untuk menghasilkan setiap angka rasional positif yang mungkin. Setiap bilangan rasional akan dihasilkan tepat satu kali, dan akan selalu muncul dalam term yang paling sederhana; misalnya, 1/3
adalah bilangan rasional keempat dalam urutan, tetapi bilangan yang setara 2/6
, 3/9
dll tidak akan muncul sama sekali.
Kita dapat mendefinisikan bilangan rasional ke-n sebagai r(n) = s(n) / s(n+1)
, di mana s(n)
bilangan Stern-Brocot ke-n, seperti dijelaskan di atas.
Tantangan Anda adalah menulis program atau fungsi yang akan menghasilkan bilangan rasional ke-n yang dihasilkan menggunakan urutan Stern-Brocot.
- Algoritma yang dijelaskan di atas adalah 1-diindeks; jika entri Anda diindeks 0, sebutkan jawaban Anda
- Algoritma yang dijelaskan hanya untuk tujuan ilustrasi, output dapat diturunkan dengan cara apa pun yang Anda suka (selain hard-coding)
- Input dapat melalui STDIN, parameter fungsi, atau mekanisme input lain yang masuk akal
- Ouptut dapat berupa STDOUT, konsol, nilai pengembalian fungsi, atau aliran output wajar lainnya
- Output harus berupa string dalam bentuk
a/b
, di manaa
danb
merupakan entri yang relevan dalam urutan Stern-Brocot. Mengevaluasi fraksi sebelum output tidak diizinkan. Misalnya, untuk input12
, output seharusnya2/5
, bukan0.4
. - Celah standar tidak diijinkan
Ini kode-golf , jadi jawaban tersingkat dalam byte akan menang.
Uji kasus
Kasus uji di sini diindeks 1.
n r(n)
-- ------
1 1/1
2 1/2
3 2/1
4 1/3
5 3/2
6 2/3
7 3/1
8 1/4
9 4/3
10 3/5
11 5/2
12 2/5
13 5/3
14 3/4
15 4/1
16 1/5
17 5/4
18 4/7
19 7/3
20 3/8
50 7/12
100 7/19
1000 11/39
Entri OEIS: A002487
Video Numberphile Luar Biasa membahas urutan: Fraksi Tak Terbatas
True/2
bukan fraksi yang valid (sejauh yang saya ketahui). Selain itu, True
tidak selalu 1
- beberapa bahasa digunakan -1
untuk menghindari potensi kesalahan saat menerapkan operator bitwise. [rujukan?]
True
sama dengan 1
dan True/2
akan 1/2
.
True
s bukannya1
s?