2008-02-01から1ヶ月間の記事一覧

赤黒木アニメーション

挿入(3.62 MB) 削除(3.13 MB) 参考:二分木画像化レシピ - 日記を書く [・w・] はやみずさん できた。大きいのでリンクにとどめておく。 PostScriptのファイルを生成するコードは以下のような感じ。赤黒木のクラスのコードに下に追加する形で。 class My…

ImageMagick

こんな残念な変換結果。 望むのは、こういう変換結果。 どうすれば。PostScript側で工夫するしかないかな。 結局、PostScript側で工夫することにした。

ImageMagick+GhostScriptがうまくいかねー

GPL Ghostscript 8.61 (2007-11-21) ImageMagick 6.3.9 02/24/08 Q8 Windows XP Home SP2 ImageMagickでgifをjpgに変換したりとか、gswin32cでPostscriptのファイルを閲覧したりはできるんだけどねー。 D:\Desktop>convert tree.ps tree.gif convert: Postsc…

PostfixNotationTokens#to_infix_notationでカンマを出力できるように

when TokenType::FUNCTION raise Error, 'オペランドが足りない' unless stack.size >= token.val.argc dest.list.insert( dest.list.size, Token.new( TokenType::RIGHT_BRACKETS ) ) stack.pop if token.val.argc > 0 ( token.val.argc - 1 ).times do pos…

stack.cpp の stm_cur > stm_max は stm_cur >= stm_max の間違いだと思う。この前、スタックエラーぎりぎりで終了時にエラーになったのはこれが原因だと思う。ためしてないけど。 wait, await はメッセージループ内で GetTickCount を使ってやってある。タ…

二分木の画像化

二分木画像化レシピ - 日記を書く [・w・] はやみずさんを参考に試してみた。 PostScriptで出力したのをIlllustratorで画像化。 コードは以下のような感じ。 def print( out = $stdout, level = 0, lx = 0.0, rx = 592.0, parent_x = nil, parent_y = nil ) …

木の描画

HSP

二分木画像化レシピ - 日記を書く [・w・] はやみずさんを自分でもやってみよう、と思ったのだけど、座標や線の太さにはどういう式を使っているのかは書かれていなかったので、HSPで試作。 #module #deffunc draw_tree double left_x, double right_x, doubl…

「a += (a=5)」はどう処理すべき?

今の計算スクリプトだと a = 0 a += (a=5)は5になるんだけど、10の方がいいんだろうか。 Rubyでは5になった。Perlでは10に。他の言語の処理系でも試してみる。 - というか、Perlは $a = 5; print $a + ($a = 100); も200になったりするのか。 - BCCとVC++。 …

localをdup

HSP

#module #deffunc hoge local x x = "hoge" dup a, x mes x mes a return #deffunc huga mes a a = "huga" mes a return #global hoge huga問題なく動いているようだけど、開放済みのメモリにアクセスとかされてないか問題ないのか。 OpenHSPのソースを読ん…

スタックオーバーフロー

HSP

HSPでは関数呼び出しのスタックと式の計算用スタックが共有。 mes (0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+…

関数呼び出し実装できたよー

変数と関数の区別は後ろに括弧がつくかでやってる。 可変長の引数が可能になるように作ってみた。 PostfixNotationTokens#to_infix_notationでカンマを出力できていないのでそれをなんとかしたい。 putchar( 72, 101, 108, 108, 111, 44, 32, 119, 111, 114,…

変数実装できたよー

Operatorまわりの構造も変更。 class Calc class Error < RuntimeError end class Operator def initialize( mark, priority, proc, is_assignment = false ) @mark = mark @priority = priority @proc = proc @is_assignment = is_assignment end attr_read…

変数の実装

変数の実装について考えています。 変数の値と変数自体を分離して考えないといけないなー。 代入の演算子に変数の値を渡されても代入のしようがない。

右から左に結合する演算子あっさりできた

というか、さっき投稿したのにはバグが潜んでいた。 next_token = @list[i+1] token = dest.list[dest_ptr] while rop_end?( rs_stack, brackets_level, token, next_token ) ではnext_tokenとtokenがループ毎に更新されない。 while rop_end?( rs_stack, br…

数式計算スクリプトをいじり中

また数式計算スクリプトをいじくってます。 右から左に結合する演算子とか、関数とか、変数とか、式の最適化とか色々やってみたいのです! クラス構造を少し変更して、逆ポーランド記法→中置記法の変換を追加してみました。 class Calc class Operator def i…

右から左に結合される演算子

たとえば、Rubyの+や*は左から右に結合されるけど、**は右から左に結合される。 class Fixnum alias :orig_add :+ def +( other ) ret = orig_add( other ) puts "#{self} + #{other} = #{ret}" return ret end alias :orig_mul :* def *( other ) ret = ori…

今日の予定

1000speakersのustを見る。

Windowsで非描画領域が生まれると

こんなふうに遊んだりしちゃいません?

赤黒木の実装できたよ!

参考 http://www.geocities.jp/h2fujimura/mutter/tree/red-black-tree.html class RedBlackTree class Node def initialize( key, value, is_red = false, left = nil, right = nil, is_nilnode = false ) @key = key @value = value @is_red = is_red if i…

赤黒木を実装中 削除はまだ

参考 http://www.geocities.jp/h2fujimura/mutter/tree/red-black-tree.html class RedBlackTree class Node def initialize( key, value, is_red = false, left = nil, right = nil, is_nilnode = false ) @key = key @value = value @is_red = is_red if i…

単純な2分探索木の弱点

1.upto(1000) do |i| hash[i] = i end 1000.downto(1) do |i| hash.delete( i ) end こんなテストだと単純な2分探索木では激重になる。 user system total real Hash 0.000000 0.000000 0.000000 ( 0.000000) MyHash1 2.593000 0.000000 2.593000 ( 2.594000…

2分探索木の連想配列で削除方法を変えたら速くなった

連想配列の再発明(線形検索、二分探索木、ハッシュテーブル)してそれぞれの時間計測 - fujidigの雑記の2分探索木バージョンの改良。 クラス名をMyHash2Mに変更し上記の記事のコードに追加してみると、 user system total real Hash 0.032000 0.000000 0.03…

ノードの削除

repeat〜loop内でreturnやgotoできないのが不便な件

HSP

#module #deffunc func repeat return "hoge" loop #global repeat 1 func mes refstr loopできないというか、挙動がおかしくなる? これってなんでなの。

strf関数で%sが使えないようになった

http://dev.onionsoft.net/trac/changeset/49 ふむふむ。 文字列のポインタから文字列を得るのに便利だったんだけど、安全面を優先した方がいいよね。 ところで、strf関数の引数が一つだけしか指定できないのが不便なんだけど可変長引数なんかは今のHSPの仕…

連想配列の再発明(線形検索、二分探索木、ハッシュテーブル)してそれぞれの時間計測

class MyHash1 include Enumerable Pair = Struct.new( :key, :value ) def initialize @table = [] end def []( key ) @table.each do |pair| return pair.value if pair.key.eql?( key ) end return nil end def []=( key, value ) @table.each do |pair| …

その場編集機能がうまく動かない

押しても何の反応なし。FirefoxでやってみるとなにやらJSでエラーが発生している。

label.cpp(CLabel)

検索が線形検索 検索中の比較に使うハッシュ関数が各文字コードの和(abcとcbaのハッシュ値が同じ><) それでも、普通に使ってたらコンパイルが遅いということはないようだけど、#defineとか#undefとか大量に使っていたら遅くなりそう

トークンタイプ(TK_*)とコマンドタイプ(TYPE_*)には互換がある?

PutCS( TK_NONE, op, texflag ); とかみて。えっ、それってTK_*じゃなくてTYPE_*を指定するところじゃないのって思って。 0 TYPE_MARK TK_NONE 1 TYPE_VAR TK_OBJ 2 TYPE_STRING TK_STRING 3 TYPE_DNUM TK_DNUM 4 TYPE_INUM TK_NUM 5 TYPE_STRUCT 6 TYPE_XLA…

HSP 3.2ではバッファオーバーフローの可能性のある部分を少しでもつぶしてほしいなあ

大きな実数をstr関数に渡したり、mes命令に渡したりするとオーバーフローしたり。 strfの結果が長いとオーバーフローしたり。 returnに長い文字列を渡すとオーバーフローしたり><