超亀レスですみません(^_^;; >そういうケースでは末尾に挿入してからソートした方が速いです おっしゃる通りなのかもしれませんが、私の方で確認ができませんので、 保留とさせていただきます。 >トップの Japanese only は誤解を生むだけなので控えた方がよいと思います 申し訳ありませんが、曲解・こじつけの類に耳を貸すつもりはありません。
超亀レスですみません(^_^;; 感想とバグ報告をありがとうございます。 できるだけ早く修正したいと思います。
細かいことですが誤りを発見しましたので報告します http://antares.cn/hsp/long/sort.html > データを追加するときに、それが入るべき位置に挿入するようにすれば、いちいちソートする必要はありません。 このとき、挿入する位置より後の部分をずらさなければなりませんが、 とありますが、運悪く先頭に近い位置への挿入を繰り返してしまうと (つまり入力データがほぼ逆順にならんでいると) 挿入にすごく時間がかかります そういうケースでは末尾に挿入してからソートした方が速いです それと、トップの Japanese only は誤解を生むだけなので控えた方がよいと思います 参考 http://www.wdic.org/w/WDIC/Japanese+only
はじめまして。「ロンパル殺人事件」を楽しませていただいています。昔 やったときはただ手探りでガチャガチャ解いただけだったのですが、ふと思 い出して再挑戦したところ、法則性を一つ一つ理詰めで暴き出す楽しさを味 わうことができました。 ところで、プログラムの動作にビミョ〜〜に気になる点がありましたので念 のためお知らせします。 「証言表」の容疑者の名前の欄の右端をクリックすると、その右隣(0時) のマスをクリックしたのと同じ結果になります。 murder.as > *l_coordchk > i=mx-ttx/fsize2: j=my-tty/33: flg=0 > if (i<0)|(i>23)|(j<1)|(j>5): flg=1 > return 小数部分の打ち切りによって 1≦(mx-ttx)/fsize2<2 のとき i=1 0≦(mx-ttx)/fsize2<1 のとき i=0 -1<(mx-ttx)/fsize2≦0 のとき i=0 ← -2<(mx-ttx)/fsize2≦1 のとき i=-1 このように負の領域を含んで「0時(の列)」と解釈されるのだと思いま す。(これも実は、私にとってはかなり頭をひねらないと解けない問題でし た。。)
解決できて良かったですね。
アドバイス有難うございます。 2 vsaveで試してみました。 型が違う場合は同じ配列に保存できなかったので、型ごとに別々の配列で とりあえず何とかできました。
>HSPの配列の勉強の為savevars.asを研究させていただいています。 HSP3では文字配列の構造が大きく変わったため、 このスクリプトは正しく動作しません。 「HSP3 文字配列 保存」で検索したところ、以下の3つの方法があるようです。 1 arraysave命令(場合によっては思い通りにならないらしい) 2 vsave命令(すべての変数を保存するため、効率は悪いが簡単で確実) 3 1要素ずつ保存する(1や2の欠点はないが、多少面倒)
HSPの配列の勉強の為savevars.asを研究させていただいています。 最後のadimのところで astr.0=ABCDEFG astr.1=HIJKLMN astr.2=OPQRSTU と表示されると思いますがastr.1、aste.2が空白になってしまいます。 これで、正しいのでしょうか。 表示させるたいのですがどうすればよいのでしょうか。 ご教授お願いします。
丹念に調べていただきありがとうございます。 こちらでも、さらに種々検索してみたいと思います。 またこの機会に、APIについても、使えるようにしたいと 思っておりますので、その時は、報告したいと思います。
>Win32APIですか。紹介された英語版と日本語版に目を通してみたのです >が、手強そうですね。 もう少し、調べてみたら、どうやらテキストを印刷する手順だったようです。 HSPのウィンドウを印刷するのなら、ビットマップを印刷するのが最も近いと 思いますが、近いだけで同じではないだろうと思いますし、 残念ながら、初めて挑戦するのに適切なテーマとはとても思えませんでした。 残念です。m(_ _)m
回答ありがとうございます。 やはり、EXFORCE.as の3.1用が出される可能性は低そうなのですね。 代替命令は、私も何度かググってみたのですが、やはり見あたらない ようですね・・・・・ Win32APIですか。紹介された英語版と日本語版に目を通してみたのです が、手強そうですね。 実はまだ自分で組んだことがないのですが、 少し時間をかけて、この機会に取り組んでみたいと思います。 どのような手順で、組んでいくのか、その道筋のヒントをお願いします。
>@ EXFORCE.as の3.1用はそのうちに、作成されるのでしょうか。 わかりませんが、可能性は低そうです。 >A 上記@の可能性が低いなら、「pxset,pxstart,pxpage,pxfinish」の > 代替命令はあるのでしょうか。 ないと思いますが、Win32APIでできるかもしれません。 英語版 http://msdn2.microsoft.com/en-us/library/ms535663.aspx 日本語版 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_startpageprinter.asp 英語版のRemarksに印刷手順が書いてあるようなので、 参考になりそうです。
教えてほしいことがありますので、よろしくお願いします。 2.61用の私のスクリプトにおいて、 ウィンドウズの印刷設定画面からの印刷もできるし、 印刷設定画面にボタンを配置して、独自の印刷もできるようにしていま す。 独自の印刷命令は、EXFORCE.as の「pxset,pxstart,pxpage,pxfinish」 という一連の命令で実行しています。 さて、このスクリプトを、3.1用に変換してきたのですが、 この1カ所だけ、変換できずにそのままになっています。 印刷自体は、ウィンドウズの印刷設定画面から印刷できるので 支障はないのですが、独自の印刷設定画面からの印刷は、 3.1用で実行すると、エラーとなります。 やはり、何とかクリアーしたいと思います。 そこで質問なのですが、 @ EXFORCE.as の3.1用はそのうちに、作成されるのでしょうか。 A 上記@の可能性が低いなら、「pxset,pxstart,pxpage,pxfinish」の 代替命令はあるのでしょうか。 この2点について、分かれば教えてください。
>おかげで、9000行のスクリプトの >2用から3用への変換が、無事完成しました。 おめでとうございます\(^_^)/ >結局、バッファ確保の不備だったのですが、それに気づくのに >1ヶ月余りかかりました。 犯しやすい、気づきにくい、思い当たってすらあぶり出すのが 難しいと三拍子揃った、いちばんやっかいなバグですね。 可能性のあるところでは必ずチェックを入れるというのが 唯一の予防法ですが、3ではなまじ自動拡張があるので チェックする気がおきないため、自動拡張にバグがあると お手上げかも。 >ただ、今後扱うデータ量が増えると、 >2用では対応できなくなることがあるのかな?ということで、 本質的な制限は寧ろ3の方が厳しいような気が……
こんばんは、矢野です。 この度は大変お世話になりました。おかげで、9000行のスクリプトの 2用から3用への変換が、無事完成しました。 今回の変換のきっかけとなったのが、8月11日の貴兄への質問です。 「xnoteaddの限界」で始まり、「xnoteaddの限界」で終わりました。 結局、バッファ確保の不備だったのですが、それに気づくのに 1ヶ月余りかかりました。 3用なら種々の制限が緩和されたことと、 貴兄が「anthspex3.as」を出されたことを知って この機会に、2用から3用への変換を試してみようと始めました。 以前に一度変換を試みて挫折しましたので、2度目のチャレンジでした。 まず、ミムラさんの「ソースコンバーター2」を使用して変換したあと 修正を加えていきました。それでも何カ所かの不具合が残りましたので 貴兄の掲示板を始め、何カ所かの掲示板で質問し、 修正法を教えていただきやっと完成しました。振り返りますと、 貴兄の掲示板をかなり占拠してしまいました。 ほんとに感謝に堪えません。 クイックソートも貴兄のおかげだと思っています。 お礼が伝えたくて、書き込みをしました。 さて、3用への変換後の感想すが、ソフトを実行しても 2用との差異が感じられないというのが実感です。 ただ、今後扱うデータ量が増えると、 2用では対応できなくなることがあるのかな?ということで、 今後は両者を併用していきたいと思っています。 今後ともよろしくご指導ください。
>strmid命令が遅くなったのは、3.1用になってからなのです。 元々HSP3の話でしたね。すっかり忘れていました(^_^;; >この文章で、getstr命令を思いつき、「0」を勝手に改行コードと >表現しておりました。不適切でしたのでここに訂正しておきます。 了解しました。 >実際は、第4パラメータには何も書かなくても、改行部分まで >取り出してくれていたのですね。 デフォルトは0だと思います。ほとんどデフォルト値が 明記されていますが、この命令は見落とされているようですね。 多くの場合、数値引数のデフォルトは0です。
すみません。1文読み落としていました。 「HSP3 レファレンスブック」の説明ですが、私の勝手な解釈でした。 ”peek命令はpeek関数になりましたが、同時にver2.xでサポート していた文字列読み出しの機能は廃止されています。 同等の処理を行う場合はgetstr命令で、区切りキャラクターコードを 「0」として使ってください。” この文章で、getstr命令を思いつき、「0」を勝手に改行コードと 表現しておりました。不適切でしたのでここに訂正しておきます。 実際は、第4パラメータには何も書かなくても、改行部分まで 取り出してくれていたのですね。
他の掲示板で、解決法を見つけました。 やはり、「poke」命令の併用が必要だったようです。 次のように修正すれば、きれいに処理されました。 memcpy kudamono1,kudamono,place1,0,hajime : poke kudamono1,place1
先ほどのスクリプトですが、1カ所修正してください。 poke obuf,1000,0 → poke obuf,10000,0
strmid命令が遅くなったのは、3.1用になってからなのです。 特に、処理する対照が大きくなればなるほど、遅くなっています。 スクリプトを、3.1用に書き換えて、num=100000 としてみました。 試してみてください。 #include "anthspex3.as" num=100000 sdim ibuf,10001 sdim obuf,10001 ;ibufの作成 repeat 10000 c=rnd(62) if c<26 { c+='A' } else { if c<52 { c+='a'-26 } else { c+='0'-52 } } poke ibuf,cnt,c loop ;strmid gettick start repeat num obuf=strmid(ibuf,0,10000) loop gettick vend mes vend-start ;memcpy gettick start repeat num memcpy obuf,ibuf,10000 poke obuf,1000,0 loop gettick vend mes vend-start ;getstr gettick start repeat num getstr obuf,ibuf,0 loop gettick vend mes vend-start stop
※ すべてのボタンは1回だけ押してしばらくお待ちください. ※ 検索文字列はスペースで区切ることで複数指定できます.