果冻,10字节
BµLḤ_J’×µḄ
在线尝试!
当前不是最短的,但是如果有办法的话可能会Bµ µḄ
...
说明
BµLḤ_J’×µḄ Main link. Argument: n (integer)
B Binary; convert n to an binary of binary digits. Call this A.
µ Start a new monadic link with argument A.
L Length; yield len(A). We'll call this l.
Ḥ Unhalve; yield l * 2.
J Length range; yield [1, 2, ..., l].
_ Subtract; yield [l*2 - 1, l*2 - 2, ..., l].
’ Decrement; subtract one from each item.
× Multiply each item by the corresponding item in A. Call this B.
µ Start a new monadic link with argument B.
Ḅ Unbinary; convert from a binary array to a decimal.
基本上,这是通过将每个二进制数字乘以一个幻数来实现的。我无法在不可视化的情况下对其进行解释,因此这是我们将使用的二进制数字:
1111
正如挑战所解释的,他要输出的是这些二进制数的总和:
10111 = 2^4 + 2^2 + 2^1 + 2^0
11011 = 2^4 + 2^3 + 2^1 + 2^0
11101 = 2^4 + 2^3 + 2^2 + 2^0
但是,我们实际上不必插入零:Jelly的“ unbinary”原子将接受除just 0
和之外的数字1
。当我们允许自己使用时2
,此模式变得更简单:
2111 = 2*2^3 + 1*2^2 + 1*2^1 + 1*2^0
2211 = 2*2^3 + 2*2^2 + 1*2^1 + 1*2^0
2221 = 2*2^3 + 2*2^2 + 2*2^1 + 1*2^0
当我们总结每一列中的数字时,我们得到
6543 = 6*2^3 + 5*2^2 + 4*2^1 + 3*2^0 = 48 + 20 + 8 + 3 = 79.
该答案使用的技巧是生成此模式,然后将每个数字乘以原始数字中的相应数字以取消必要的列。12,例如,将表示为
1100
×6543
=6500 = 6*2^3 + 5*2^2 + 0*2^1 + 0*2^0 = 48 + 20 + 0 + 0 = 68.