エクセルには10進数を2進数に変換するDec2Binという関数が
あります。これはエクセル2007ならば標準装備なのですが
古いエクセルではアドインの「分析ツール」を組み込まなければ
使えません。ちょっと不便です。それに変換できる10進数の
上限が511までという制限があります。あまり、使い勝手が
よくありません。
ところが、このブログの常連のminmaxさんが10進数の1023まで
対応する関数を作ってくれました。「関数で解けますか?・・・
ナップサック問題解答例」のコメントの中にその関数があるのですが
このままでは埋もれてしまいそうです。そうなったら、あまりにも
もったいないので改めてここに紹介させて頂きます。
=TEXT(SUM(INT(MOD(十進数,2^ROW($1:$10))/2^(ROW($1:$10)-1))*10^(ROW($1:$10)-1)),"0000000000")
2進数に変換する10進数を上式の赤文字の十進数のところに
入れて、Ctrl+Alt+Enterを同時に押します。配列数式です。
便利ですよ!! (^O^)
*************************************************************************
minmaxさんのDec2Binを使って「10枚の領収書」の問題を解いてみました。
すっきりと出来ました。(^O^)
>=TEXT(SUM(INT(MOD(・・・
はもっと良い方法があるような気がしていたのですが、くまぷーさんが活用してくれました。
感謝です。
さすがノンマクロでゲームを作る方
こちらは反復計算は得意ではありません。
投稿情報: minmax | 2009年2 月 2日 (月曜日) 午後 10時46分
>感謝です。
いやいや、こちらこそ感謝です。
既存の関数の組合せで、備え付けの
関数よりも優れたものを作ってしまうのだから
たいしたもんです。(^O^)
ある意味、本当の「表計算腕自慢」の
大賞に値すると思います。
投稿情報: くまぷー | 2009年2 月 2日 (月曜日) 午後 10時59分
大賞はってのは大げさだと思います。
個人的には、
=DEC2BIN(A1/512,9)&DEC2BIN(MOD(A1,512),9)
みたいにアンドでつなぐ方が軽そうですし
いいと思いますよ。
投稿情報: minmax | 2009年2 月 3日 (火曜日) 午前 07時07分
>=DEC2BIN(A1/512,9)&DEC2BIN(MOD(A1,512),9)
でも上式はDEC2BINが組み込まれていないと
使えないから、前の式がいいかな~
投稿情報: くまぷー | 2009年2 月 3日 (火曜日) 午後 05時54分
>でも上式はDEC2BINが組み込まれていないと
>使えないから、前の式がいいかな~
確かにDEC2BINは私にはなじみもないし分析ツールアドインも必要ですね・・・
じゃついでに、
配列数式で
=TEXT(SUM(INT(MOD(A2/2^15,2^ROW($1:$15))/2^(ROW($1:$15)-1))*10^(ROW($1:$15)-1)),"000000000000000")&TEXT(SUM(INT(MOD(MOD(A2,2^15),2^ROW($1:$15))/2^(ROW($1:$15)-1))*10^(ROW($1:$15)-1)),"000000000000000")
で最大1073741823までを2進数に変換して30桁(30レシート)まで対応する。
でも、反復計算ではこの巨大な数値を反復させるには、きついか。
も1つついでに
=DEC2BIN(MOD(A2/512^3,512),9)&DEC2BIN(MOD(A2/512^2,512),9)&DEC2BIN(MOD(A1/512,512),9)&DEC2BIN(MOD(A1,512),9)
で多分36桁の2進数に対応出来るかも。
頭が混乱してきたので、間違っていたらごめんなさい。
投稿情報: minmax | 2009年2 月 3日 (火曜日) 午後 11時11分
minmaxさん、どもです(^^ゞ
>で最大1073741823までを2進数に変換して30桁(30レシート)まで対応する。
上はジョー3さんの・・・
>で、ついでに、30枚の領収証でも
>出来るようにして欲しいなーー
>それが出来たら、RAND解法からは
>手を引きたいぐらいですーー
・・・を意識してのことだと思いますが
エクセルの反復計算回数の上限が32767回なので
1073741823までやるにはF9を32769回押さなくてはなりません。(^^ゞ
1回の反復計算に5秒かかると約45時間かかります。
・・・ということでジョー3さんには
まだまだRANDで頑張ってもらいましょう(^^ゞ
投稿情報: くまぷー | 2009年2 月 4日 (水曜日) 午後 08時25分
ですね〜
ということでジョー3さん頑張ってください。
投稿情報: minmax | 2009年2 月 4日 (水曜日) 午後 09時12分
ああーーーーーーー
>で、ついでに、30枚の領収証でも
>出来るようにして欲しいなーー
す、す、、、すごいことになりそうな・・・・・・
投稿情報: ジョー3 | 2009年2 月 4日 (水曜日) 午後 09時28分
>す、す、、、すごいことになりそうな・・・・・・
領収書が1枚増えるごとに、処理時間が
幾何級数的に増えていくから
30枚でやろうという人はいないと思うけど・・・
投稿情報: くまぷー | 2009年2 月 4日 (水曜日) 午後 10時01分
>でやろうという人はいないと思うけど・・・
そ、、、
そそそ、、、、、
そこをなんとか、やってほすいーーーー
投稿情報: j | 2009年2 月 4日 (水曜日) 午後 10時11分
>ということでジョー3さん頑張ってください。
×2
投稿情報: くまぷー | 2009年2 月 4日 (水曜日) 午後 10時17分