べき剰余数列に現れる0の扱い方に誤り

べき剰余数列に現れる0の扱い方が間違っていた.一度0が発生するその後は0が続くことになるので,当初は0という一字だけの最短の周期列とみなすという立場を取っていたのだが,どこで切り替わったのかよく覚えていないが,いつの間にか0は周期列に入れない,つまり,周期列を持たない固定部だけの数列ということになってしまった.しかし,一文字だけ連続するというのは0に限った話ではなく,マトリックスの一行目は必ず{1,1,1,1,…}となるし,1や0以外の数字が並ぶ{9,9,9,9,…}とか,{10,10,10,10,…}などというのも頻繁に出てくる.

異種文字数をカウントしてその行ないし列の異種文字数と周期が一致しないような場合を濃色で表示することにしているが,この場合,0を周期列にカウントしないと横数列の異種文字数例外と縦数列の異種文字列例外が整合しなくなってくる.縦数列では縦に集計した異種文字数はそれ自体が横数列としての周期を持っているが,その例外となるのは固定部を持った列のみであるはずなのに,うまく数字が合わなくなる.従って,{0}はそれ自体周期列であるとする以外にないと思われるが,修正はかなり広範に影響する可能性があるので,慎重に行う必要がある.どこから着手すればよいか?

固定部のoffsetを計算している箇所は多分2箇所と思われる.ラムダ関数とPowerResidueFuncだ.どちらもこのツールの要と呼ぶべき重要関数だが,まず簡単そうなラムダ関数の方から見ることにしよう.⇒この関数ではγ=1のときoffset=1としているが,これでよいのだろうか?

γ=1でマトリックスを開こうとして例外が発生した.

image

ゼロ除算が起きている.α mod Xで起きている.マトリックス先頭行の指数のインデックスを表示しようとするところだ.γが1ということはすべての値が割り切れるはずだから,すべての行が{0,0,0,0,…}のようになるはずであり,固定桁=0,周期1となるのが正しいように思われる.この場合,X=1でなくてはならないのではないだろうか?この値XはBuildmatrixで計算しているので,そちらを修正する必要があるが,暫定的に1を強制しておこう.⇒こんな図になった.

image

周期ゼロなのだから,横インデクスがすべてゼロというのは正しい.Zも1になっているが,これでよいのだろうか?Zは縞周期と呼ばれる横縞の幅でγ/0行数だが,いまの場合は0行数=γだから,Z=1でよいと思われる.いや,間違えた.それはYのことだ.Y=1はよいが,X=0は間違っている.BuildMatrixではX値を計算していない.表示されている値を数値化しているだけだ.この値を計算しているのはDispModPowだ.この関数はLambdaFunctionの返す値を見ているだけなので,やはり,LambdaFunctionから修正する必要がある.

ValueChangedで例外が起きた.

image

DispParametorでエラーが起きている模様だ.DispModPowの中でΩがゼロになっている.今回の仕様変更によってすべての行はなんらかの周期列を持つことになったのでこの方式ではΩ数をカウントできなくなったが,ともかく例外が発生しないようにしておこう.

α=1,γ-2では問題なくマトリックスを開けた.X=1,Y=2,Z=1となっている.このzは0でなくてはならないものと思われる.なぜなら,縦数列の異種文字数はすべて2で,周期1の単純な周期列になっているからだ.⇒LambdaFunctionを修正してR=0が検出されたとき,offset=i-1を返す用に修正した.

DispResidueCycleで固定桁数不一致が発生する.λ<>周期 不一致も起きている.⇒この不一致はPowerResidueFuncとLambdaFunctionの間で起きているので,PowerResidueFunc側にも対応修正を入れる必要がある.LambdaFunctionではoffset=1, λ=0となっているのに対し,PowerResidueFuncはdrop=1, period=0を返している.

▲DispInvertFuncで停止した.α=7, β=10, ε=4,γ=2.理由はR2 <> 0.R2はnU mod β-1. PowerResidueFuncは逆数モード(Bブロック)でも使われているので,上の修正が影響している可能性はある.nU=40,β-1=9.⇒Bブロックについては後で確認することにする.

一応修正は一通り入ったはずだが,点検に入る前に異種文字数例外の濃色表示をモードに関わりなく出せるようにしておこう.⇒大体できた.とてもわかり易くなった.

image

X, Y, Zがマトリックスの形状を決定していることがよく分かる.Xは横周期,Yは縦周期,Zがオフセットだ.上の図ではX=2, Y=2, Z=2となっているが,横周期は2,ゼロ行の周期は2,左下の変則的な部位を示す濃色部は2桁になっている.これらの例外部位を除くと,異種文字数にも完全な周期性が確認できる.横数列の場合,最右列を見ると,{1,3,2,2,2,3.2,1}のようになっているが,固定部を例外として除くと,{1,1,2,1,2,1,2,1}であり,これは{1,1}{2,1}{2,1}{2,1}のように読み替えることもできる.縦数列の最下行を見ると{5,2,5,2,…}で完全な反復になっている.まだ完全に解析できた訳ではないが,縦横数列の規則性がはっきり見えてきたのではないか?

どうも,このZという数は1, 2, 3などのごく小さい数しか現れてこないような気がする.本当にそうだろうか?だとすれば,この数はもっと注目されてよいような気がする.γが2^kの場合はZ=k-1になる.おそらくこれが最大値ではないかと思われる.どうもこの値はγに含まれる素因数2の個数-1であるような気がする.たとえば,γ=448=2^6×7なのでZ=5で間違いない.2以外の素因数は関係していないようだ.

ここまで来れば,縦数列をセグメントで色別表示することもできるだろう.現行のstripeカラー表示は存続させて,新たに処理を追加することにする.⇒数値をカラーコード化するのはかなり難しい.既存のstripeカラー表示では同様のことをやっているのだが,かなりインチキな代物で「数値のカラーコード化」とはかけ離れたものだ.

コメントを残す

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

CAPTCHA