Collatz12146.ZELでは左手にひどいスプリットが残っている

基本的なところで解決したと思っていたのだが,まだまだのようだ.Collatz4000-12243.ZELは遅いなりに正常描画できるが,Collatz12146.ZELでは左手にひどいスプリットが残っている.

image

ともかく,描画までに時間がかかり過ぎる.何かもう少し小ぶりの反例サンプルはないものだろうか?⇒Collatz3900-6165.ZEL(6165点)というのがあった.レッドラインオーバーは発生せず,30回ループして脱出しているが,スプリットが出ている.これは格好のサンプルかもしれない.ループから脱出してくるのでテスト時間もかなり短くて済む.⇒いや,ダメだ.解けてしまう.画面がまだ更新されていなかったのだろうか?⇒なぜだろう?コマンド引数で開いた場合と,ダイアローグから開いた場合で動作が違う.前者ではスプリットが出るが,後者では出ない!なぜ,こんなことが起こるのか?見当も付かない.ファイルのオープンの方法は内部処理にはまったく無関係のはずなのだが…
いや,違う.これはズーム倍率の違いだ.

前回セッションの最終ログの日付は2022/05/06だ.その後は,興味が「経済循環マトリックス」の方に移って,去年の暮に作業再開するまで中断した状態になっている.2022/05/06の時期の最大の障害はメモリ不足という感じだ.12146点の「極小反例サンプル.ZEL」というのは,Collatz12146.ZELと同一と思われる.ここで中断された「極小反例サンプルの生成」にもう一度チャレンジしてもよいのではないだろうか?ファイルを開くこと自体は問題なく実行できているので,今度は最後まで進める可能性はある.「極小反例サンプルの生成」を実行するためのスイッチがどこかにあるはずだが…

「コラッツ極小反例サンプル生成ツールの実装@20220417」というコンパイルオプションがある.試してみよう.⇒いや,これは現状でもオンになっている.このオプションはほとんど作用を持っていないように見える.実際の処理はメニューから選択→実行することで始めて起動されるようになっている.まず,対象サンプルファイルを開いてから,ヘルプ→ 包括テスト→ 極小反例サンプルの生成だ.

動作のネックになっているのは,ステージ2「個人データのロード」のところだ.これはもう少し速くできるのではないだろうか?

setmaxrefnumでレコード番号を設定している箇所がある.CARDTABLE::makelinkでは空スロットにリンクを設定し,そのレコード番号を参照番号に流用している.その参照番号が使用済である可能性があるのではないか?Renumberでもレコード番号→参照番号を行っているが,これは仕様である.MARGTABLE::makenewlinkでも同様のことが行われている.しかし,makelinkの呼び出し元では引数は参照番号であるという認識はある.CARDTABLE::makelinkの引数名を変えておこう.⇒対処した.

emptyrecnを廃止してみよう.この関数は,①CARDTABLE::makelink ,②NODECLASS *newlink,③getnewRefnum から呼び出されている.⇒①は完全廃止,②はemptyrecnを改造して,maxRecordの次を返すようにした.③はこの関数自体を廃止して,呼び出し元ではgetmaxrefnum() + 1で間に合わせるようにした.


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA