任何人都可以向我解释代码战中this kata的解决方案
说明是 -
编写一个名为_的函数/ proc / lambda,它总是返回5.
听起来很容易吗?请记住,您只能使用以下字符:
!〜@#$%^&安培; *()-_ + = [] {} |:;?"'<,> /`
这些解决方案将如何运作
_=_=>-~-~-~-~-~[]
_=()=>+!""+!""+!""+!""+!""
还有很多other solutions,但我不理解其中任何一个。
我所理解的是定义了一个名为_的函数。返回评估的表达式如何超出我的范围。
提前致谢!
答案 0 :(得分:2)
_=()=>+!""+!""+!""+!""+!""
首先,这会设置一个名为_
的箭头函数:
_=()=>
如果调用它,则会对此进行评估:
!""
空字符串""
是假的,它的否定(!
)是真实的,所以我们最终会:
true + true + true + true + true
由于添加布尔值确实不起作用,因此首先将它们转换为数字(false
- > 0
,true
- > 1
)
-~-~-~-~-~[]
稍微复杂一些。
~[]
将bitwise否定运算符调用到空数组。同样,将空数组转换为数字,首先将其转换为字符串([]
- > ""
),然后将其解析为数字(""
- > { {1}}),它的否定是数字0
(其中设置了32位)。现在做
2 ^ 32 - 1
将其转换为负数( ~-
),然后再次交换所有位。重复此操作,直到我们以二进制文件到达-
。