幹線路と支線路の相互乗り入れをどうする?

予備機の検証テストが完了していたので,メール送信でレポートし,そのまま続行する.コラッツ木生成処理ではコラッツ仮想木の実装はほぼ完了しているが,タブBの方はまだ未着手に等しい.どういう仕様にするのが最適か?悩んでいるところだ.仮想木出力を指定したときには非コラッツ数は扱わないというのが一番わかり易いような気もするのだが…たとえば,非コラッツ数が指定されたときの出力はどうなるのか?一番重要なポイントは,Get the SequenceとGet the Numberが完全な逆演算になっていなくてはならないという点だ.つまり,Get the Sequence⇔Get the Numberでなくてはならない.それを仲介する枝番号列の基準ノードをコラッツ数に限定するのか,それとも枝番号列の書式を拡張して幹線路と支線路のいずれも扱えるようにするのか?

どこかで幹線路と支線路の乗り入れをしなくてはならないのだが,どこでそれをやるか?が問題だ.一つの考え方として,通常のコラッツ木を指定した画面でGet the Sequenceを実行したときの出力にその情報を含めるということが考えられる.そして,それ以外の場所では幹線路と支線路は完全に分離するという方式だ.まず,これを試してみるのがよいのではないだろうか?もし,それがそれなりにわかり易いものであれば,その方向でまとめるものとし,そうでなければまた別の方法を考えてみるとしてみよう.この情報を出力すると,解法の理論的な正当性も確認できる.あるいは,先にタブBの仮想木検定を仕込んでしまうという手順もあるかもしれない.

やり易いところから着手するとすれば,後者ではないだろうか?「仮想木出力では非コラッツ数は扱わない」とすれば,既存のコラッツ木生成でルートに非コラッツ数を指定したときの動作には問題があると言えるかもしれない.最初にこの部分を修正して,動作に違和感を感じるかどうかを見てみることにしよう.⇒与えられた数字がコラッツ数でないときには,メッセージを出してコラッツ数に切り替えることを通知するようにした.これがベストなのではないか?

image

コラッツ数に切り替えるということは支線路から幹線路に切り替えるというように翻訳できるので適切ではないかと思う.これでよいとすれば,タブBの処理もすべてこのように扱うことができる.上ではGet the Sequenceで通常のコラッツ木のときには幹線路を併記するとしているが,むしろ逆に仮想木のときにそうすればよいのではないか?木の高さは同じになるはずだから,併記で問題ない.通常のコラッツ木では予備知識のない人でも理解できるように現状のままとしておく方がよい.

どこか間違えているのだろうか?433という数は432を4で割った商108が奇数ではないため,コラッツ数と考えられるが,5-3-10という仮想木上に現れない.⇒ゼルコバの木のカード数上限は現在3069点で打ち切りになっている.樹高61で試してみよう.⇒出てきた.きっちり対応している.下記のリストでは右側が仮想木,左が一般木のコラッツ数列だ.

433    433
325 [1]    81
61 [2]    15
23 [2]    23
35 [1]    35
53 [1]    3
5 [3]    5
1 [1]    1

433という数は一般的なコラッツ数列では433→ 325 → 61 → 23 → 35 → 53 → 5 → 1のように進むが,仮想木ではそれとはまったく異なる経路をたどる.433はそれ自体はコラッツ数だが,コラッツ数から出発してもすぐに一般道路に降りてしまう場合がある.433の場合の高速道経路は433→ 81→ 15→ 15→ 23→ 35→ 3→ 5→ 1のようになっていて,一度高速道から一般道に分岐しているが,その後もう一度高速道に戻っていることがわかる.このことから,一般道と高速道は平行して走っていて,高速道が一般道を束ねた構造になっていることが認められる.

高速道にはまだ枝番号が付されていないが,それを付けるのは簡単だ.また,それが与えられれば枝番号リストから高速道経路を1から上昇することはできる.ただし,それだけの情報では一般道の経路を完全に復元することはできない.上記したようにここは割り切ることが必要なのではないだろうか?ランプを出たところで元のアドレスへの地番を指定することができれば復元は不可能ではないが,仮想木の検証テストには非コラッツ数を含めないという予定なので,その元になる論理に支線のアドレスを加えると論理が無闇に複雑なものになってしまうのではないかと思う.むしろ逆に,Get the Sequenceでも仮想路を本線とし,そのおまけ情報として一般道路情報を付加するという仕様の方がわかり易いのではないかと思う.そういう方針でまとめることにしよう.

つまり,Get the sequenceでは任意の奇数を設定できるが,それ以外の処理では原則として非コラッツ数はまったく扱わないということにしたい.仮想木と一般木を比較したい場合には,Get the Sequenceを使うしかないということになるが,それでよいのではないか?これだけの仕様なら論理もそれほど複雑なものにはならないと考えられるし,高速道と一般道の相互乗り入れというものがどういうことを意味しているかは,これだけでも十分理解できるのではないかと思う.Get the sequenceの付帯情報の中に乗り入れに関する付帯情報を追加してもよい.

コラッツ数の仮想木上の枝番号をvorderとする.与えられたコラッツ数Mからvorderを得るにはどうすればよいか?例えば,21233という値が与えられたときの親番号は995,最右コラッツ数は663,vorderは3である.21233の親は15925.しかし,これはコラッツ数ではない.その右ノードは3981でコラッツ数ではない.その隣りが995で親に出てしまった.いや,手続き的には合っているのではないか?親の右に進めば仮親に出るはずだ.しかし,これではvorderを求めたことにはならない.

663は995の長子のはずだが,合っているだろうか?確かにそのようだ.3981は3の倍数なので子どもがいない.そのため21233の隣りが663になっている.つまり,コラッツ数でない親からコラッツ数までのノード数を数えて,そこから3の倍数を落としたものがそのノードの枝番号になると考えてよい.つまり,いまの場合は2だ.⇒一応できたようだ.

433    433
81 [1]    325 [1]
15 [1]    61 [2]
23 [1]    23 [2]
35 [1]    35 [1]
3 [2]    53 [1]
5 [1]    5 [3]
1 [1]    1 [1]

これで仮想木の枝番号リストを取ることができるようになった.仮想木モードではこの枝番号列を出力するということになる.おかしい.枝番号リストが出力されていない.一般木モードでも出力されない.出荷版でもそうなっていたのだろうか?読み間違えていた.出力されている.枝番号リストは逆順に出力しているので,更新されていないと勘違いしてしまった.⇒Get the Sequenceの基本機能はこれで完全だ.高速道と一般道をつなげるブリッジ情報は後回しにして先に進もう.

今度は枝番号リストからコラッツ数を求めるという段だ.一応バックアップを取っておこう.このプロジェクトは開発環境で開いていてもコピーできるというのはなぜだろう?VS2017では一旦閉じないとコピーできないことになっているのだが…

GetNodeNumberでは引数でNとposを渡して,その次の番号を返すようになっている.一般木の場合には,Nの長子ノードを見つけて,そこからpos分左にシフトして得た値を返すようになっている.仮想木の場合も先頭はNの長子ノードのはずだが,それでよいのだろうか?たとえば,ノード3の長子ノードは…いや,3には子どもがいないのだから,長子もクソもない.それではどういうことになるのか?

3の親の子どもを見るしかないだろう.3の親は5でその子どもを列挙すればよいのではないか?その子どもの中で3の倍数でないものは必ず有効な子どもを持つはずだからそれをカウントすればよいはずだ.いや,5は3の他にも113とか227などのコラッツ数を持っている.どこで区分すればよいのだろう?3の子どもには17や35がある.これらは3の兄弟の子どもだ.兄弟ノードは3から初めて左にシフトすれば取り出すことができる.そのうちで,3の倍数でないノードをカウントすればよいのではないか?⇒大体動くようになった.仮想木モードではどんな枝番号リストを与えても即座に答えが出る.つまり,コラッツ木の全領域に自由にアクセスできるようになった.もう誰もこれを否定することはできない.

仮想木モードで以下のような枝番号リストを与えてみた.

1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

この数列は最大枝数8,高さ46の仮想木上にある.終端ノードは

32173099041860762800256009014059337270151874861822163878010366212117093498044081202440322041294047798815956074582858403201045161834721742197820853207051899509256665790691

という巨大数だ.10進で170桁もある!ここまで大きな数はWindows 10の電卓にも入り切らない.

1 [1]
5 [5]
14563 [5]
79535217 [5]
1737473334385 [5]
9488921036856433 [5]
51822160755951934577 [5]
141509046970919416019171 [5]
386414037595257285343017187 [5]
2110335863986898454353331199089 [5]
46100990394081792368166637821172849 [5]
251772875538878695386680731354031987825 [5]
687507798804831424202562850417410014755043 [5]
1877354629269726342355798290206474280291104995 [5]
10252859415318398797719133062247624869429821414513 [5]
27997141443429440983638379348644180976789699009231075 [5]
152901721803049320358643735749395420374574142855747312753 [5]
835047270007053354918672988839364855805674252182854657383537 [5]
4560471490598520722329179416381384599173388982587963568857291889 [5]
12453127483661027252440212592998767545476134181786865852026311719139 [5]
34005340115383711750663407187281967910846830405732668353266515201063139 [5]
185714497483482244440956421118809254083771489789174679433306195018072824945 [5]
507124387794895515486771667268428469818085348117639657972548116529350860650723 [5]
2769575323210522708578422332175310683166503447853136052074076113738961500300483697 [5]
7562787015913534009558145248393381705499998748270963512863610507916524203487187482851 [5]
165211603291636454950134202332902887817215972655561954926343192748939110066578772958714993 [5]
3609102544440228903870665028029707885329688661318302759350942493331491172441102154874115267697 [5]
78842048117478280481355967758984978657655492036052096545607789080990868492366690273943339394604145 [5]
1722330821809018863208714901017613187102703442024903399737650688403939185838581137931050230188259089521 [5]
37624890912691953406415446584363432609987590925514689735068891838413519494372417818483102628539249230290033 [5]
205482070904514988203570225612736826627345563241210892206456241293522367798599231179342384488662353129690635377 [5]
561103041616595594454549096073180027910404951357333209651763176225511745668708300607057604577040665612808561670371 [5]
1532185372307717036590555398343830262880679120506424551155747979879797406839352799524338632231705710900042579067893987 [5]
4183887523314939321249943274410885837839507785062876641022629150391766785609326044567794025080711061231049602574729181411 [5]
22849604393997321946453023535982651189054165183490056962171585333339569005141065971399579102307456675736505562861454302747761 [5]
499157224521669497027581783484719676108617923155068124357625672135247331440308299833880938682940493567022542855896089728292428913 [5]
1363031994427172173216649990102274528893932675495439358245889835377315379719668530746384216563549507767016223691833589018057192552675 [5]
7443972065564929628660531145945221960466064318439092815166886354273978393775683069249586334725731711751597936322333840823949680927677553 [5]
20327006387035967839329023715861086100045999632217682780615711004737477000603465234430870418024398060889696764784186274676598595386511505635 [5]
111012557548399099026522241520222678221051219324751504892535936367206274392629058133638460309637245943205597264741369308100463795604201502776433 [5]
606276580957656946150180135022442786657901059138909552053102927146769199882944829487177511237698879177826835195174198247972666275726412473829694577 [5]
13244314003213668540966068442943603488804067937242525467784051144496888761176224115090555125491277915266019823783645418793045552348668722628300954606705 [5]
72331613542884248458396021789729333186855283027927179088057964650479008487703751967214551725349699121239489597623748847168419443226862783847360946758753393 [5]
1580108208382154035656480561337233859911249276172745202904988923777930766750051029641124287290839293869850396756623334816009845543771893134073549002260554128497 [5]
4314748814355535286699296252824873260130984690135709567399223087862936280405472678273363387162185165127271483410086119604250884898193116184776837808839486473550051 [5]
11782140762400181689546878301047120582331008860530577592044811845257724669693877393471797622544206957574202664031808497266007749695332669261897285110004357730440673507 [5]
32173099041860762800256009014059337270151874861822163878010366212117093498044081202440322041294047798815956074582858403201045161834721742197820853207051899509256665790691

この数列は仮想木上の枝数番号列だが,これを一般木の数列つまり,通常のコラッツ数列に変換すると下記のようになる.

32173099041860762800256009014059337270151874861822163878010366212117093498044081202440322041294047798815956074582858403201045161834721742197820853207051899509256665790691
48259648562791144200384013521089005905227812292733245817015549318175640247066121803660483061941071698223934111874287604801567742752082613296731279810577849263884998686037 [1]
17673211143600272534320317451570680873496513290795866388067217767886587004540816090207696433816310436361303996047712745899011624542999003892845927665006536595661010261 [7]
6472123221533302930048944379237309890196477035203564351098834631794404420608209017410045080743277747690907225115129179406376327347289674277165256713259229710325077 [7]
1185081156286615526742360421002925394933436957129558902178741692833448075062538272230843215468129470402387797567467501112007384157828919850555161751695415596373 [7]
54248710157163186343797016342296999890141462270945384316043473487859256365777813975410913794012274340929617198217811635376314582420147087885520710069065045 [8]
9933235502410251405724551332207702616603050952931894100838038358372666570882168086317916344118458436449514867837734064094784164261501541971225715955029 [7]
454707435718242709612635101266832089993425794354182164039827195360076899912208622115383133428274159383370126396380648685979499706794809355372270933 [8]
83259418161299324269891681140167008665788414493563628669401952275404705794471793600228845232227934457404197948556026981075347846703151127082325 [7]
30490509580553951758993535573791629150068999448326524170923566507106215500905197851646305627036597091334545147176279412014897893079767258453 [7]
5582979049173697221495398359458916470349548238829319611375164765705483795331762301937189751044298783813698452241750380617962260695758165 [7]
2044547991640758259824974985153411793340899013243159037368834753065973069579502796119576324845324261650524335537750383527085788829013 [7]
374367918391252122770686337613539757081463442366301093268219254101435498580231224875410704012205370175266907141922067296219321685 [7]
17137203295497991459839767651986988391790623887617542721628689000004676753855799478549684326730592506802379172146090727060821 [8]
6275831284972408981874914911616328756759261677594314961533943725587650178413989066851691037621066591846574403862093772117 [7]
2298278058461575554885833097515745394321018680759636826733621969819696110259029199286507948347558566350063868601840981 [7]
841654562424893391681823644109770041865607427035999814477644764338267618503062450910586406865560998419212842505557 [7]
154111553178386241152677669209552619970509172430908169154842180970141775848949423384506788366496764847267976533 [7]
28218668184518965054811584938272574457490693194136017301301668878810139620779313363862326971404436922717525 [7]
1291748116356764147406536175763209890327027581518677549803238016302954389378935853448287672641194317141 [8]
59131536088108710361016975819238733993241619027039072409205841810743151369275017705457504545953109 [8]
2706826908330171677902998771022280913997266495988727069513206869998618379330826616155586450773 [8]
123908702468727341212600651749677165862911979491671466194757394561704332549934079719036245 [8]
11344180523870301014337217872590072558249998122406445269295415761874786305230781224277 [8]
2077181492407892031433816749131483012374877585889852039055557085304221125225362773 [7]
760686581692343273230157500902642704727128022176459486958822174794026290976085 [7]
139285873112611683330717315839106940562828617341881009574979646263554618709 [7]
51008010173075567625995110780922951866270245608599002529899772801594709 [7]
18679691225491540878660318889498151318214201272680298778039467578709 [7]
3420353617948890541746884562286038449380041736940972676642968917 [7]
626285452505290016189004741629523641854255689137140993037653 [7]
114676291352286990268982801812046565280930607141810484565 [7]
41995712165144161475457569022966271465184548513846613 [7]
7689644561488799098289349796685718652072366060885 [7]
2816031943904589513533697435309711420436657493 [7]
1031261698207247136303844275626115022132565 [7]
188829656654159021540010548515523990869 [7]
34575742795561344276124978365879637 [7]
1582751897990173840764998399317 [8]
579621056392885928014525781 [7]
212263570456379124028757 [7]
38866620566963950933 [7]
7116690777642325 [7]
1303105000789 [7]
59651413 [8]
21845 [7]
1 [7]

最大枝数と木の高さは変化していない.

コメントを残す

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

CAPTCHA