機能を実装、無謀に実行
言葉にできないケースを検討したので、早速E〇CELの修正に取り掛かることにする。
現在の実装では、0~82という数字は、カタカナを紐付ける為の単なる番号であり、対応関係については深く考えていなかった。
別に82が「ア」でも、0が「パ」でも構わない――0から82までの数字が、83種類のカタカナと対応付けされていれば、何ら問題は起こらなかった訳だ。
しかし、今回はそうもいかない。文字の種類によって、出力できるものと、できないものが分かれるのだから。
文字の種類を大まかに分けると、「ン」以外の大文字(平音、濁音、半濁音)、「ン」、拗音、「ッ」、「ー」の5種類となる。
まず、促音符(ッ)を0とし、長音符(ー)を1とした。
その後、2から72に「ン」以外の大文字(ア~ヲ、ガ・ザ・ダ・バ・パ行、ヴ)を割り当てる。これらは常に出力候補に挙がる文字達だ(「アアアアアアア」も起こり得る!)。
次に73。ここには「ン」を入れる。他の大文字同様、常に出力候補に挙がるが、「ン」が直前にあるかどうかで、74以降の拗音の出力可否が変わってくるので、この位置にした。
最後に拗音(ァ行、ャ行、ヮ)を74から82まで割り当てる。
配置が済んだら、分岐の方法を考える。
一文字目(C列)については、2から73までの乱数を生成させればよい。よって、「=rand()*71+2」と設定する。こうすることで、「0から71までの乱数」に対して2が足されることになり、結果として目的の乱数が手に入る。
二文字目(D列)は、一文字目の値が73(ン)かどうかで分岐が発生する。この場合、「=IF(C1=73,RAND()*73,RAND()*82)」とする。「ン」の場合は0から73(拗音を除いた文字)、それ以外なら全種類を乱数の範囲にする。
三文字目から六文字目(E列~H列)においては、同じ条件となる。
直前の文字(左隣のセル)の値が 0(ッ)か 1(ー)だった場合:大文字だけが許容されるので、2から73までが範囲となる。
2から72(「ン」を除く大文字)の場合:全ての文字を取り得る。
73(ン)の場合: 0から73まで。
74から82(拗音)の場合:「ン」の場合と同じ。0から73まで。
これらを総集させると、以下の計算式となる。
「=If(D1<=1, rand()*71+2 , if( D1<=72 , rand()*82 , rand()*73 ))」
七文字目(I列)については、0(ッ)が範囲外となる以外は、三文字目と変わらないので割愛する。
さて、上記の実装により、およそ二割のパターン数削減に成功した訳だが――それだけでは足りないことも、分かり切った話である。
いくら五兆削ろうとも、残りの二十幾兆は安泰な訳で、僅か五億では足元にも及ばないことは自明の理だからだ。
これ以上、分母を削ることは出来ない。
何とかして分子を増やすしかない。
マクロの修正をするという手もあるが……
この時私は、更に簡単な実現方法を思いついていた。
安直すぎるガキの発想。単純すぎるサルの発想。
このE〇CELを並列で動かせば、早くなるんじゃね?
直感を信じて、私は「無限の猿定理.x〇sm」をコピー&ペーストし、二つの分身「無限の猿定理-コピー.x〇sm」「無限の猿定理-コピー(2).x〇sm」を作り上げた。
三つのファイルを同時に開き、それぞれのマクロを実行する。これにより、通常の三倍の機動力を実現することが可能となる……!!
タスクマネージャを開いてみると、CPU使用率が92%と面白いことになっていた――利用率の折れ線グラフもアルプス山脈みたいになっている。
頼むからもってくれ、PC!!
この
熱き想いを胸に、私は一つ目の「実行」ボタンをクリックした。
すると、普段よりもカクカクながら乱数が生成された。
それだけなら良かったのだが、他の二つのファイルの文字列も連動するように動き出したから、さあ大変。
ここに来て、私は悟ったのだった。
rand関数って、他のファイルの操作にも反応しちゃうんだ――
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます