アカウント名:
パスワード:
#define get_a(n) ("0125396bf48ae7dc"[(( n * 0x9afu )& 0xFFFF) >> 12])
実はこのコード、int が 32bit であることを仮定しています。つまりオリジナルは実は
#define get_a(n) ("0125396bf48ae7dc"[(( n * 0x9af0000u )& 0xFFFFFFFF) >> 28])
と等価です。32bit int を仮定することで巧妙にビットマスクを1つ隠しているわけです。 64bit int マシン上では動きません。 で、多分このことに気がつけば、あとは簡単かと。 . 話を簡単にするために、<<12 のほうで
v を表現するビットパターン( たとえば v=3 なら 0000 0001 0010 0011 ) の全てのビットパターンを内包する最小のビット列は何か? を求めればよい
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
いや、多分これは簡単に求められる。 (スコア:1)
実はこのコード、int が 32bit であることを仮定しています。つまりオリジナルは実は
と等価です。32bit int を仮定することで巧妙にビットマスクを1つ隠しているわけです。 64bit int マシン上では動きません。
で、多分このことに気がつけば、あとは簡単かと。
.
話を簡単にするために、<<12 のほうで
fjの教祖様
Re:いや、多分これは簡単に求められる。 (スコア:1)
おそらく、与えられたビットパターンが任意となると一般的な解法はなさそうですが、今回のケースでは規則性があるので(0000,0001,0010,...)、なにか一般的な解き方がありそうな気がします。