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/3
sırayla 4 rasyonel sayı, ancak eşdeğer sayılardır 2/6
, 3/9
hiç 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/b
olduğua
ve formdaki bir dize gibi olmalıdırb
. Fraksiyonun çıkıştan önce değerlendirilmesine izin verilmemektedir. Örneğin, giriş için12
, çıkış olmalıdır2/5
değ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/2
geçerli bir kesir değil (ilgilendiğim kadarıyla). Bir yana, True
her zaman değil 1
- bazı diller -1
biti operatörlerini uygularken olası hataları önlemek için kullanır. [kaynak belirtilmeli]
True
eşittir 1
ve True/2
olacaktır 1/2
.
True
s yerine1
s kullanabilir mi?