悪あがきの可能性


 前回までの実装で、事実上、1億回の演算を30分で済ませることが可能となった。

 ただし、これだけやっても10億回やるのに5時間、100億回やるのには50時間――おおよそ2日かかる計算だ。

 発音できない文字列を取り除いたとはいえ、「シェイクスピア」の総パターン数は約21兆4000億。甘く見積もったとして、半分の地点で当たりを引いたとしても10兆7000億回の演算が必要。

 100億回出力しようとも、出現確率は0.093%にしかならない。重複することも考えれば、更に少なくなるか。

 挑戦権を得るには、せめて小数点以下から――1%の確率にはなってほしい。

 そうなった場合、100億回の更に10.75倍の演算(1075億回)が必要となる。そうなると、今の演算形式では約21.5日となり、今年中にはギリギリ間に合わない計算だ。

 演算量、1日で終わってくれなければ、どの道先はない。

 そうなると、どんな手段を用いようとも、演算速度を21.5倍にする必要がある。倍速でわいわい言っている場合ではなかったのだ。とんだハードなSFである。


 早速、実装の方を考えていきたい。

 前回で一文字限りの出力セルは取り除かれた。しかし、絞り込みを行う内、あることに気付いたのだ。


――Q列って本当に要るのだろうか?


 Q列の機能は、C列からI列に生成された乱数に従い、カタカナに変換しながらも、7文字を結合して表示するというものだ。「シェイクスピア」に最も近い文字列をAH列に表示する際にも用いられる。

 重要な箇所ではあるが、10000行ものセルに非常に重い計算式(7文字分を1つにまとめているから当たり前なのだが)が設定されているのだ。

 マクロを実行し、結果を見る時――私は「シェイクスピア」に一番近い文字列しか見ていない。例えば、今の実装では一回の周期に530000個の文字列が生成されるが、最優秀を除く529999個の文字列を眺める必要がないことは、誰だって分かることだろう。

「シェイクスピア」に最も近い文字列の基準となるのは、一致文字数(AF列)であり、文字列そのもの(Q列)ではない。AF列が最大値となるQ列の値を取るだけならば――わざわざ10000行もセルに表示させなくとも、マクロ内部で文字列結合を行ってしまえばいいのでは。


 集中維持用のハッカキャンデーを口に放り込み、E〇CELの改修を始めた。

 実施内容は以下の通り。


・Q列の記載を削除。

・マクロの記載を修正。AH列に表示する文字列について、Q列を参照していたところを、以下の通りに修正。

「Moji = WorksheetFunction.VLookup(Cells(Target, 3).Value, Range("A1:B83"), 2, False) & …(中略)…& WorksheetFunction.VLookup(Cells(Target, 9).Value, Range("A1:B83"), 2, False)」

 複雑なように見えるが、やっていることは、元々Q列がやっていた作業(C列からI列までの乱数を、対応するカタカナに変換し、それらを「&」で結合する)をコードに書き直したに過ぎない。


 これにより、10000行出力していたものが、計算式とマクロという実装の違いはあるにせよ、1行で収まった。


 実行結果は以下の通り。

 1回目:5.72秒――ズャボ

 2回目:5.67秒――ダ

 3回目:5.58秒――ポホゲ


 おおよそ4秒程度の削減となった。倍速とはいかないまでも、更に高速化が見込める事は確かだ。

 そろそろ、本格的にレポートを取ってみてもいいかもしれない。

 1000億は無理でも――10億ならば、3時間半くらいで終わってくれるはずだ。


<備考>

 マクロを実行してから長時間放置していると、PCが自動でスリープモードに入ることで、処理が中断されてしまうという問題があった。

 これにより以前、貴重な休日の20時間を棒に振ってしまった苦い経験があったが、実はPC本体にてスリープに関する設定を切り替えることで予防が可能と判明(マクロでも実施が可能らしいが、今回は対応しない)。

 とりあえず、10億回の実行による試運転を経てから、放置する時間を伸ばしていこうと思う。無論、その間の電気代は……

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る