ÆlÐĿĊḊi1
Çevrimiçi deneyin! veya tüm test durumlarını doğrulayın .
Arka fon
Sonuç artık değişmeyene kadar art arda girdilerin doğal logaritmalarını ve ardından gelen sonuçları alarak başlarız. Bu işe yarar çünkü doğal logaritmanın karmaşık düzleme genişletilmesi sabit bir noktaya sahiptir ; Eğer z = E -W (-1) ≈ 0.318 + 1.337i - W belirtmektedir Lambert W işlevi - Elimizdeki log (z) = z .
N girişi için , [n, log (n), log (log (n)),…, z] hesaplamalarından önce, sonuçların her birine tavan fonksiyonunu uygularız. Jelly'in uygulaması ( Ċ
) aslında karmaşık sayının hayali kısmını hesaplar. † , ancak bunlarla da ilgilenmiyoruz.
Bir kez k inci uygulanması log daha düşük bir değer elde edilir ya da eşit , 1 , Ċ
döner 1 ilk kez. İlk 1'in 0-tabanlı endeksi istenen sonuçtur.
Basit uygulama (hesaplama 1 tabanlı dizin, azaltma) , logaritma listesinde 1 bulunmayan uç durum 0 nedeniyle başarısız olur . Aslında, 0 girişi için , logaritma dizisi
[0, None]
Bunun nedeni Jelly'in logaritmasının ( Æl
) aşırı yüklenmesidir; önce math.log
(gerçek logaritma), sonra cmath.log
(karmaşık logaritma) dener ve nihayet "vazgeçer" ve geri döner None
. Neyse ki, Ċ
benzer şekilde aşırı yüklenmiştir ve basit bir şekilde toplanamaz veya hayali bir rol alamazsa argümanını döndürür.
Aynı şekilde, giriş 1 döndürür
[1, 0, None]
Bu, içermeyen veya içermeyen diğer yaklaşımlarda problem yaratabilir Ċ
.
Bu sorunu çözmenin bir yolu Ḋ
logaritma dizisine uygulanır (dequeue; first element'i kaldırır). Bu haritalar
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
yani hiçbir liste şimdi 1’e sahip değil . Bu şekilde, ilk 1'in endeksini bulmak geri dönecektir. 0 ve 1 girişleri için istenen çıktı olan 0 (bulunamadı) .
Nasıl çalışır
ÆlÐĿĊḊi1 Main link. Argument: n (non-negative integer)
ÐĿ Apply the following link until the results are no longer unique.
Æl Natural logarithm.
Return the array of all unique results.
Ċ Round all resulting real numbers up to the nearest integer. This takes
the imaginary part of complex numbers and does nothing for non-numbers.
Ḋ Dequeue; remove the first item (n) of the array of results.
i1 Find the first index of 1 (0 if not found).
† Bu, Jelly'de belirgin olmayan bir şekilde aşırı yüklenmiş olan sadece üç atomdan biridir.