カメヲラボ

主にプログラミングとお勉強全般について書いてます

正しいビット演算(ハノイの塔)

Code Golfの成績が思わしくないので真面目にハノイの塔について勉強しようと思い、ネットでいろいろと調べていました。たぶんウィキペディアの情報が正しくないからなのだろうけど、n番目の移動場所をビット演算で行う方法を調べたら間違いばっかりです(´ω`)まあ、(n|(n-1))-1)%3が正しくは(n|(n-1))+1)%3みたいな細かいところはまあ気にしないとして、このビット演算って円盤の数が偶数個だと棒Cじゃなくて棒Bに移動しちゃうんじゃないですか?っちゅうことです。

だとしたら、円盤の個数をkとすれば、

  • kが奇数の時
((n|(n-1))+1)%3
  • kが偶数の時
(2-(n|(n-1)))%3

と分けなければならないのですが、これって一つにまとまらんかいなーと思ったりします。まあ、無理やりくっつけて縮めればよいだけですが、エレガントなビット演算は無いものですかねぇ…