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