Stern-Brocot dizisi bir Fibonnaci benzeri dizisi olarak inşa edilebilir aşağıdaki gibidir:
- İle sırayı başlat
s(1) = s(2) = 1 - Sayacı ayarla
n = 1 - Ekleme
s(n) + s(n+1)sekansına - Ekleme
s(n+1)sekansına - Artış
n, 3. adıma geri dönün
Bu eşdeğerdir:
Diğer özellikler arasında, Stern-Brocot sekansı, her olası pozitif rasyonel sayıyı üretmek için kullanılabilir. Her rasyonel sayı tam olarak bir kez üretilecek ve daima en basit haliyle görünecektir; örneğin, 1/3sırayla 4 rasyonel sayı, ancak eşdeğer sayılardır 2/6, 3/9hiç görünmez vb.
Rasyonel sayıyı r(n) = s(n) / s(n+1), s(n)yukarıda açıklandığı gibi, nt Stern-Brocot numarası olarak tanımlayabiliriz.
Buradaki zorluk, Stern-Brocot dizisi kullanılarak oluşturulan rasyonel sayının çıktısını alacak bir program veya işlev yazmaktır.
- Yukarıda açıklanan algoritmalar 1 indekslidir; Girişiniz 0 dizinli ise, lütfen cevabınızı belirtiniz.
- Açıklanan algoritmalar sadece açıklama amaçlıdır, çıktı istediğiniz şekilde türetilebilir (sabit kodlama dışında)
- Giriş, STDIN, fonksiyon parametreleri veya başka herhangi bir makul giriş mekanizması aracılığıyla olabilir.
- Çıkış, STDOUT, konsol, fonksiyon dönüş değeri veya başka herhangi bir makul çıkış akımı olabilir.
- Çıktı , Stern-Brocot sekansındaki ilgili girişlerin
a/bolduğuave formdaki bir dize gibi olmalıdırb. Fraksiyonun çıkıştan önce değerlendirilmesine izin verilmemektedir. Örneğin, giriş için12, çıkış olmalıdır2/5değil0.4. - Standart boşluklara izin verilmez
Bu kod golf , bayt cinsinden en kısa cevap kazanacak.
Test durumları
Buradaki test vakaları 1 indekslidir.
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
OEIS
girişi: A002487 Sıralamayı tartışan
Excellent Numberphile video: Sonsuz Kesirler
True/2geçerli bir kesir değil (ilgilendiğim kadarıyla). Bir yana, Trueher zaman değil 1- bazı diller -1biti operatörlerini uygularken olası hataları önlemek için kullanır. [kaynak belirtilmeli]
Trueeşittir 1ve True/2olacaktır 1/2.

Trues yerine1s kullanabilir mi?