ÆlÐĿĊḊi1
在线尝试!或验证所有测试用例。
背景
我们从连续获取输入和随后结果的自然对数开始,直到结果不再改变为止。之所以有效,是因为自然对数到复平面的扩展有一个不动点 ; 如果z = e -W(-1) ≈0.318 + 1.337i –其中W表示Lambert W函数 –我们有log(z)= z。
对于输入n,在计算[n,log(n),log(log(n)),…,z]之后,我们首先将上限函数应用于每个结果。果冻的实现(Ċ
)实际计算的虚部复杂的号码,而不是†,但我们无法在这些反正感兴趣。
一旦ķ 个的应用程序日志产生一个值小于或等于1,Ċ
将返回1首次。该第一个1的从0开始的索引是所需的结果。
直接实现(基于计算1的索引,递减)由于边缘情况0失败,对数情况0的对数列表中没有1。实际上,对于输入0,对数序列为
[0, None]
这是因为Jelly的对数(Æl
)已重载;它首先尝试math.log
(实对数),然后尝试(cmath.log
复数对数),最后“放弃”并返回None
。幸运的是,Ċ
类似地重载了它,如果它不能四舍五入或没有想象的部分,则只返回它的参数。
同样,输入1返回
[1, 0, None]
这可能在其他涉及或不涉及的方法中产生问题Ċ
。
解决此问题的一种方法是Ḋ
对对数数组应用(出队;删除第一个元素)。这个地图
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
所以现在两个列表都没有1。这样,找到第一个1的索引将返回0(未找到),这是输入0和1的期望输出。
怎么运行的
Æ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).
† 这是果冻中仅有的三个以非显而易见的方式超载的原子之一。