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.
基本的に、これは各2進数にマジック番号を掛けることで機能します。視覚化せずに説明することはできませんので、ここで使用する2進数を示します。
1111
課題で説明したように、私たちが望む出力はこれらの2進数の合計です。
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」アトムは、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.