ÆlÐĿĊḊi1
Cobalah online! atau verifikasi semua kasus uji .
Latar Belakang
Kami mulai dengan mengambil logaritma natural dari input dan hasil selanjutnya hingga hasilnya tidak lagi berubah. Ini berfungsi karena ekstensi logaritma natural ke bidang kompleks memiliki titik tetap ; jika z = e -W (-1) ≈ 0.318 + 1.337i - di mana W menunjukkan fungsi Lambert W - kita memiliki log (z) = z .
Untuk input n , setelah menghitung [n, log (n), log (log (n)), ..., z] , pertama-tama kita menerapkan fungsi plafon untuk setiap hasil. Implementasi Jelly ( Ċ) sebenarnya menghitung bagian imajiner dari bilangan kompleks † , tetapi kami tetap tidak tertarik dengan ini.
Setelah k th penerapan log menghasilkan nilai kurang dari atau sama dengan 1 , Ċakan kembali 1 untuk pertama kalinya. Indeks berbasis 0 dari yang pertama 1 adalah hasil yang diinginkan.
Implementasi langsung (menghitung indeks berbasis 1, penurunan) gagal karena tepi kasus 0 , yang tidak memiliki 1 dalam daftar logaritma. Bahkan, untuk input 0 , urutan logaritma adalah
[0, None]
Ini karena logaritma Jelly ( Æl) kelebihan beban; pertama kali mencoba math.log(logaritma nyata), kemudian cmath.log(logaritma kompleks), dan akhirnya "menyerah" dan kembali None. Untungnya, Ċkelebihannya juga sama dan hanya mengembalikan argumen jika tidak dapat mengambil atau mengambil bagian imajiner.
Demikian juga, input 1 kembali
[1, 0, None]
yang dapat menciptakan masalah dalam pendekatan lain yang melibatkan atau tidak melibatkan Ċ.
Salah satu cara untuk memperbaiki masalah ini adalah menerapkan Ḋ(dequeue; menghapus elemen pertama) ke array logaritma. Peta ini
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
jadi daftar tidak memiliki 1 sekarang. Dengan cara ini, menemukan indeks dari 1 pertama akan mengembalikan 0 (tidak ditemukan), yang merupakan output yang diinginkan untuk input 0 dan 1 .
Bagaimana itu bekerja
Æ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).
† Ini adalah satu dari hanya tiga atom dalam Jelly yang kelebihan muatan secara tidak jelas.