Æ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.