Hatena::Groupnadesiko

99円のへたれ学習帳

2008-10-27

基数変換

| 23:16

個人的に現在、どう書く?orgの過去ネタ消費週となっておりまして(^ ^ やっと消化率が50%をえました。

で、以下のような基数を変換する問題があったんですが、なでしこって基数変換が標準ではないんですね・・・

数になる13進数 http://ja.doukaku.org/14/

いや、16進だったら

HEX(15)
INT($F)

とかやれば変換できますが、任意のn進数や小数の場合は対応していないので、自前で書いてみました。

まずはn進数→10進数の関数

●十進変換(radixのnを)
	もし、radix>36||radix<1ならば、空で戻る
	もし、n=空ならば、空で戻る
	n=nを大文字変換
	baseとは配列="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"を文字列分解
	dataとは配列=nの"."を""に置換を文字列分解
	tmpとは配列=nを"."で区切る
	startとは整数=tmp[0]の文字数-1
	endとは整数=tmp[1]の文字数*-1
	ansとは実数
	iとは整数
	iでstartからendまで繰り返す
		ans=ans+(baseのdata[回数-1]を配列検索)*radix^i
	ansで戻る

36の"10"を十進変換して表示
8の"1427.654"を十進変換して表示

36進数まで。小数にも対応しています。データを増やせば何進数でも行けます。ひらがなも使ってめざせ100進数え(ぇ

次は10進→n進数

●基数変換(nをradixに)
	もし、radix>36||radix<1ならば、空で戻る
	もし、n=空ならば、空で戻る
	xとは整数=nの整数部分
	yとは実数=nの小数部分
	もし、x=0&&y=0ならば、"0"で戻る
	baseとは配列="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"を文字列分解
	ansとは文字列
	tmpとは実数
	x<>0の間
		ans=base[(x%radix)]&ans
		x=INT(x/radix)
	もし、y=0ならば、ansで戻る
	もし、ans=""ならば、ans="0."
	違えば、ans=ans&"."
	16回
		tmp=y*radix
		ans=ans&base[tmpの整数部分]
		y=tmpの小数部分
		もし、y=0ならば、抜ける
	ansで戻る

35を36に基数変換して表示
0.2を16に基数変換して表示

こちらも小数に対応。小数部は循環することがあるので16で切ってます(もっと増やすことも出来ます)

計算精度の問題か、小数部分がおかしくなることもありますが、気になる方は任意精度の計算機を使うといいかもしれませぬ。

#どっちの関数も宣言がやたら長い(^ ^;

KayceeKaycee2011/11/24 01:28Phenomenal breakdown of the topic, you soluhd write for me too!

agckfydragckfydr2011/11/24 20:353DudAc <a href="http://waleoxtgusut.com/">waleoxtgusut</a>

bgsblvvbgsblvv2011/11/25 01:27Fje2c0 , [url=http://pmoldkrfakhp.com/]pmoldkrfakhp[/url], [link=http://novraujrlfxh.com/]novraujrlfxh[/link], http://bjiqmqwydfzj.com/

vcwrnjdvcwrnjd2011/12/01 04:16qckj3G <a href="http://bflxpzcumjvb.com/">bflxpzcumjvb</a>

rkoiodrkoiod2011/12/05 01:50qwLNB0 , [url=http://dmtchbbzmytl.com/]dmtchbbzmytl[/url], [link=http://ipenhcbyhskn.com/]ipenhcbyhskn[/link], http://uqmlrncmlvnu.com/

2008-06-28

UNIX時間を取得する

| 19:32

UNIXを取得したいことがたまにあるのですが、標準ではついていないので自作するしかありません。

システム時刻を取得して時を引いてもいいのですが、どう書くorgでWin32APIのGetLocalTimeを使ってみたので、の標準時刻版のGetSystemTimeを使ってみました。

Nothing found for 404 - どう書く?org

!変数宣言が必要
UNIX時間とは整数 →UNIX時間取得
●GetSystemTime({参照渡}UTCTime) =DLL("kernel32.dll","VOID GetSystemTime(LPSYSTEMTIME UTCTime)")
●詳細標準時取得
	SYSTEMTIMEとは文字列
	Iとは整数
	BUFとは配列
	SYSTEMTIMEに16を確保 //WORD(16bit)*8[byte]
	GetSystemTime(SYSTEMTIME)
	Iで0から7まで繰り返す
		BUF[I]=SYSTEMTIMEの(I*2+1)を"WORD"でバイナリ取得
	BUFで戻る
●UNIX時間取得
	Tとは配列=詳細標準時取得
	_=日数差("1970/1/1","{T[0]}/{T[1]}/{T[3]}")*(60*60*24)+秒差("0:0:0","{T[4]}:{T[5]}:{T[6]}")

時間エディタとはエディタ
これについて
	文字サイズは36
	幅は300
時間タイマーとはタイマー
これについて
	値は200
	時満ちた時は
		時間エディタはUNIX時間
	開始

ゲッターを使って「UNIX」として使えるようにしてみました(関数の名前を短くした方が簡単か・・・)

やっぱり「今日」と「」から生成するのが簡単?

ちなみに、システムのUTCとの時以下の様にレジストリから取得できます。(分で入っているので扱いやすいように秒にしています。)

●GetTimeZoneDiff
	Hとは整数="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"のレジストリ開く
	TZDとは整数=(Hで"ActiveTimeBias"をレジストリ整数読む)*60
	Hのレジストリ閉じる
	TZDで戻る

2008-05-18

検索時に遅れを入れて体感速度を上げる

| 18:51

エディタ部品の「変更した時は~」を使って、エディタに文字が入力されたときリアルタイムに検索したい、ということが思います。しかし、単純に以下のように書くと日本語を入力した時に、一度に入力されたように見えても文字数分イベントが発生してしまいます。

テストエディタとはエディタ
これについて
	変更した時は
		# 検索処理
		「検索しました」を表示

f:id:kyuuzyuu9yen:20080518184818p:image

検索処理が軽ければ気になりませんが、重い場合は一文字ずつ引っかかるような感じになってしまいます。

こんな時は文字が入力された後、少し待ってから検索処理を行うようにするとうまくいきます。

例えばタイマーを使って以下のようにします。

テストエディタとはエディタ
これについて
	変更した時は
		検索タイマーの停止
		検索タイマーの開始

検索タイマーとはタイマー
これについて
	間隔=0.2
	時満ちた時は
		検索タイマーの停止
		# 検索処理
		「検索しました」を表示

f:id:kyuuzyuu9yen:20080518183243p:image

エディタの内容が変更されるとタイマーがリセット(初は開始)されます。エディタの内容が変更されなくなってから0.2秒経つとタイマーの「時満ちた時は~」が実行されるので、タイマーを止めてから検索処理を行います。

タイマー隔は0.1秒でも日本語対策になりますが、検索処理が重い場合は少し大きめ(0.3秒くらい)にすると処理回数が減って体感速度が上がるかもしれません。

mr-80bmr-80b2008/05/19 23:30なーるーほーどー

StickStick2013/03/04 15:16Thanks for your thoughts. It's hleepd me a lot.

lqgbrikqlqgbrikq2013/03/09 12:01NXyZir , [url=http://yoqjhxunjqdu.com/]yoqjhxunjqdu[/url], [link=http://srnqtsfbuuer.com/]srnqtsfbuuer[/link], http://hgbhihloftnt.com/

lqgbrikqlqgbrikq2013/03/09 12:01NXyZir , [url=http://yoqjhxunjqdu.com/]yoqjhxunjqdu[/url], [link=http://srnqtsfbuuer.com/]srnqtsfbuuer[/link], http://hgbhihloftnt.com/

2008-04-15

数値をカンマで区切る

| 20:48

http://nadesiko.g.hatena.ne.jp/kisaburo/20080415/name

ただ単に数値区切るだけなら、「通貨形式」を使って以下のようにできるようです。

"123456"を通貨形式
表示 # → 123,456

 


自分はたまにTOPOZOさんなどとコードをいかに短くするか、という遊びをするのですが、はなでしこ標準機能で済ますのはつまらない(?)ということで、以下の仕様の関数を作ってみました。もちろん短く(^ ^;

いうわけでTOPOZOさんのコード。

●カンマ区切る(I,N)
  qとは整数=文字数(I);pとは整数=INT(q/N);(p-NOT(q%N))回;I=文字挿入(I,q-(回数*N)+1,",");(回数=p)なら戻( I)

NOTやらなにやら、無理矢理ワンライナーにするテクニックがいっぱいです。読めません><

●カンマ区切る(A,N)
  Bとは文字列;(文字数(A)%N)ならB="("&リフレイン("#",文字数(A)%N)&")"
  (文字数(A)/N)回;追加(B,"("&リフレイン("#",N)&")")
  一致(A,B);戻(文字右端削除(置換(抽出文字列,改行,","),1))

あえてワイルドカードを使ってみたようです。原理がよくわかりません><

で、自分の書いたものですが

●カンマ区切(N,X)
  正規表現置換(N,`\G((?:^[-+])?\d{1,`&X&`})(?=(?:`&リフレイン(`\d`,X)&`)+(?!\d))`,`$1,`)

いうことでPerlメモのまんまですorz

ほら、ワンライナーになってるし一応読める・・・?

 

追記

よく考えるとこれでいいですね。理解しないで書いたのでorz

●カンマ区切(N,X)
  正規表現置換(N,`\G((?:^[-+])?\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)

短くするならこんな感じでしょうか

●カンマ区切(N,X)
  正規表現置換(N,`(\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)

SWinXSWinX2008/04/23 14:17面白そうなので参加!
●カンマ区切る(SをIで)
 D=Sの文字数%I。リフレイン("#",(I-D)*(D>0))&SをIで行揃え。改行を","に置換。"#"を空に置換

●カンマ区切2(SをIで)
 Sを文字列逆順。Iで行揃え。改行を","に置換。それを文字列逆順

●文字列逆順(Sを)
 Sを文字列分解。配列逆順。""で配列結合

JessalynJessalyn2011/07/10 16:54This article achieved exactly what I wanetd it to achieve.

daupsliojvdaupsliojv2011/07/11 02:45CcVFkX <a href="http://ogxfwmpnbkuj.com/">ogxfwmpnbkuj</a>

dndyhjhizocdndyhjhizoc2011/07/11 21:30ASMfwy , [url=http://lctwxmcqoacm.com/]lctwxmcqoacm[/url], [link=http://isupgmfczsls.com/]isupgmfczsls[/link], http://zrlqrusbfigz.com/

mdfbrymdfbry2011/07/12 18:28hdw9qQ <a href="http://gjcytclixndg.com/">gjcytclixndg</a>

nwerrovnwerrov2011/07/13 23:51zwKeoZ , [url=http://guoooawrvgkq.com/]guoooawrvgkq[/url], [link=http://abujpnuivvqr.com/]abujpnuivvqr[/link], http://dyyyrakiuxkp.com/

2008-03-19

cgi.nakoのバグ?

| 20:48

cgi用cnakocgi.nakoでフォーム取得が出来ないとの連絡(AOI氏に感謝)

調べてみると、なでしこ標準添付のcgi.nakoがおかしいみたい。

古いバージョンのものを入れたら動いたので、書き直したものをアップしておきます。

http://wbot.net/tsukumo/nako/cgi.txt

kujirahandkujirahand2008/03/20 12:13修正しておきます。感謝。

kyuuzyuu9yenkyuuzyuu9yen2008/03/24 20:58なでしこはCGIでもそこそこ使われているようです(^ ^

HimelHimel2012/09/13 06:36This is the prfeect way to break down this information.

tatkifydfldtatkifydfld2012/09/14 05:49S6Oykf , [url=http://dzjnqmwufrli.com/]dzjnqmwufrli[/url], [link=http://dlerrmflezuj.com/]dlerrmflezuj[/link], http://aupzmvthyuzx.com/

nyzmwsbgnnyzmwsbgn2012/09/16 10:38SqFHkh <a href="http://utfqllxqbzoa.com/">utfqllxqbzoa</a>

svdhoqzcxwsvdhoqzcxw2012/09/17 02:51XJkGvy , [url=http://ieetjliiloek.com/]ieetjliiloek[/url], [link=http://uglzkfureptr.com/]uglzkfureptr[/link], http://gaxpopntdkba.com/