|
|
2009/7/30(Thu) 23:47:31|NO.26614
題の通り3桁の2進なら
000,100,010,001,110,011,101,111
とパターン化したいのですが うまくいきません
一応自分で作りましたが全パターンを表示することは出来ませんでした
s="00000"
repeat strlen(s)
cnt1=cnt
b=s//値初期化
poke b,cnt,peek(b,cnt)+1
mes b
repeat strlen(s)
if cnt>cnt1 {
poke b,cnt,peek(b,cnt)+1
mes b
}
loop
loop
誰か助けてください(><)
|
|
2009/7/31(Fri) 00:30:47|NO.26615
すごく汚いソースですが、こんな感じでしょうか?
sdim bit
; 求めたい数字(10進数)
a = 126
; 区切りたいビット(桁)
spl = 3
repeat
repeat spl
if(a\2 == 0){
bit = "0"+bit
}
else {
bit ="1"+bit
}
a = a/2
loop
bit = " "+bit
if(a == 0):break
loop
mes bit
|
|
2009/7/31(Fri) 01:07:50|NO.26616
綺麗に並べてみたVer.(ただし8桁まで)
#include "hspmath.as"
//8桁まで
sdim ref,4096
s="00000000"
l=strlen(s)
repeat int(pow(2,l))
s="":z=cnt
repeat 8
s+=(z>>(7-cnt)&1)
loop
ref+=strf("%0"+l+"d",s)+"\n"
loop
mesbox ref,640,480,0
|
|
2009/7/31(Fri) 01:08:11|NO.26617
#module
#deffunc _bitsdraw str in,int n,local s
if(n==0){mes in:return}
s = in
_bitsdraw s,n-1
poke s,n-1,'1'
_bitsdraw s,n-1
return
#define global bitsdraw(%1) _bitsdraw %1,strlen(%1)
#global
s = "00000"
bitsdraw s
これで列挙できますが、数十桁となると時間が大変なことに。
|
|
2009/7/31(Fri) 01:17:10|NO.26618
#module
#define ctype pow2(%1) (1 << (%1))
#deffunc mes_2 int n, int keta
buf = ""
repeat keta
buf += ""+((n & pow2(keta - cnt - 1)) != 0)+""
loop
mes buf
return
#deffunc _Pattern int n, int i, int keta
if n == 0 {
mes_2 n, keta
}
repeat keta - i, i
a = n + pow2(cnt)
mes_2 a, keta
if (a & pow2(keta-1)) == 0 {
_Pattern a, cnt + 1, keta
}
loop
return
#define global Pattern(%1) _Pattern 0, 0, %1
#global
Pattern 3
なたでさんのスクリプトに似てるけど
|
|
2009/7/31(Fri) 01:38:56|NO.26619
楽しそうなんで参加.
桁数指定するようにしたので私もキレイに並べてみる.
#define LV 32
sdim logbuf:notesel logbuf
mesbox logbuf,ginfo_winx,ginfo_winy
sdim buf,LV+1
memset buf,'0',LV
noteadd buf
repeat
f=0
repeat LV
c=peek(buf, LV-cnt-1)
if(c=='0') {
poke buf, LV-cnt-1, '1'
f=1
break
}
poke buf, LV-cnt-1, '0'
loop
if(f=0):break
noteadd buf
objprm 0,logbuf
await 0
loop
stop
|
|
2009/7/31(Fri) 02:20:49|NO.26620
数十桁は時間的にもメモリ容量的にもちょっと辛そうです。
20桁として、10秒実行から類推すると約20分かかります。
メモリ容量の方はやりようもありますが。
n=5
x=1
repeat n
x*=2
loop
mes "2^"+n+"="+x
i=0
repeat x
mask=1
s=""
repeat n
if i&mask: s="1"+s: else: s="0"+s
mask=mask<<1
loop
mes s
await
i++
loop
そうか、2^nは1<<nでよかったのね(^_^;;
約20分はtitle入れた場合で、類推計算にも問題があったので、
実際にはもっと短くなります。
|
|
2009/7/31(Fri) 02:49:38|NO.26621
以前作ったスクリプトを流用してみました。
0〜100000 までのパターンを0から順に列挙します。
かかる時間が半端ないです。
;#########################################
#module Bit_Handle_Module
;#########################################
;指定したバッファの指定したビットを書き換える
;バッファの内容は32ビットまでの数値である必要がある
;%1 バッファの内容(数値であるに限る)
;%2 ビットのインデックス(数値であるに限る)
#define global ctype BitScan(%1,%2) (%1 and (1 << %2))
#define global ctype BitXor(%1,%2) (%1 xor (1 << %2))
;#########################################
;=print_1byte(int)
;指定した数字を八桁の二進数に変換(1byte)
;1 0~255 変換する整数
#defcfunc print_1byte int byte_print_st1
bit_zero="00000000"
if mix > 255 : mix = 255
if mix < 0 : mix = 0
repeat 8
if 0 ! BitScan(byte_print_st1,cnt) : poke bit_zero,7-cnt,'1'
loop
return bit_zero
;=print_2byte(var,var)
;=print_4byte(var,var)
#define global ctype print_2byte(%1,%2) print_1byte(peek(%1,1)) +%2+ print_1byte(peek(%1,0))
#define global ctype print_4byte(%1,%2) print_1byte(peek(%1,3)) +%2+ print_1byte(peek(%1,2)) +%2+ print_1byte(peek(%1,1)) +%2+ print_1byte(peek(%1,0))
;#########################################
#global
;#########################################
text = ""
repeat 100000 : int_ = cnt : title str(cnt)
text += print_4byte(int_," ")+"\n"
await 0.01
loop
mesbox text,ginfo(12),ginfo(13)

| |
|
2009/7/31(Fri) 20:00:25|NO.26646
>>題の通り3桁の2進なら
>>000,100,010,001,110,011,101,111
>>とパターン化したいのですが うまくいきません
>>一応自分で作りましたが全パターンを表示することは出来ませんでした
>>誰か助けてください(><)
000
100
010
001
110
011
101
111
どういう風な「パターン」?にしたいのでしょうか?
この順番では、どんな「パターン」?にしたいのか、良く分かりませんが?
|
|
2009/8/1(Sat) 15:01:43|NO.26664
|
|