万を超える下ごしらえ


 一億回の演算をするにあたって、二点の機能を追加しようと考えた。


 一点目は、各フ〇ーザ周期(530000回)で最も「シェイクスピア」に近い文言について、一致文字数、行数を加えて出力すること。

 実装方法として「10000行を53回ループすること」を更に189回ループする――入れ子の形式を取るため、530000回の演算が終わり、次のループへ移行する度に「惜しい文字列」を格納しているAI列の内容は上書きされてしまう。

 そうなる前に、その周期で最も「惜しい」文字列を別の列に転記する必要が出てくるのだ。一致文字数、行数についても同じことが言える。


 機能の実装については、AH列~AJ列の設定と同じ方式を用いた。一致文字数の最大数(AK列に用意。MAX関数を利用)について範囲検索を行い、見つかったセルの行番号を取得するというものだ。該当行にある文字列をAL列に、一致文字数はAM列、行数はAL列にそれぞれ配置した。

 行数については、何回目のループで見つかったものかが分かるように、(ループ回数-1)*530000を加えることにした。つまり、3回目のループだった場合は、2回ループした後の回数である1060000(行)が追加されることになる。


 試しに実行してみると行数の表示部分で「オーバーフローしました」との文言が出てエラーになった。ググルの術を用いた結果、どうやらVBAの整数型は「-32,768から32,767」までが範囲(ここらへんがJ〇vaの整数型とは違う)らしく、530000が収まるような状態ではないらしい。

 今回はLong型(長整数型)に置き換えることで、正常に動作させることが可能となった――ただし、限界はおおよそ21億5000万といったところであり、今後の検討に影響がないか少々不安である。



 二点目は、各フ〇ーザ周期での実行時間と総実行時間の取得を行うこと。

 前回実施した際には20.75秒であったが、再度実施した場合も同じ結果になるとは限らない。おそらく、数秒程度の前後は想定されるはずだ。

 正確な処理時間を取得するためには、何回か時間測定を行う必要があるだろう。

 また、この試みには、プログラムを改修することによる、処理時間の改善具合を確認出来るという利点がある。

 元々の目的には「プログラミングしたい(+インテリっぽくなりたい)」という気持ちも少なからずあるのだ。

 そして何より――今回の検証を手でやろうとすると、189回もストップウォッチを押すことになるので、非常に面倒なことになる。


 実装方法については「Timer」関数を利用した。「タイマー」という読みの通り、呼び出された時点からタイマーを進める機能を持つので、プログラム開始直後に関数を起動、終了間際に参照することで、実質的なプログラムの実行時間を計測することが出来る。

 今回は各フ〇ーザ周期ごとの処理時間と、総合計時間の2つを取らなくてはならないので、起動直後にタイマーを2つ起動(便宜的にタイマーA、タイマーBとする)。タイマーAについては各フ〇ーザ起動ごとに初期化(経過時間を0にする)する処理を加え、処理終了に経過時間をAO列に記載する。

 すべてのループが完了し、処理が完全に終わった場合にタイマーBを参照し、その結果をAP1セルに記述する。



 以上二点を実装した上で、試しに3フ〇ーザ分実行してみることにした。

 結果は以下の通り。


 1フ〇ーザ目(1~530000行目)

 出力文字:レヅヌ

 一致文字数:3

 行数:29199行目

 実行時間:24.31秒(小数点3桁以下四捨五入)


 2フ〇ーザ目(530001~1060000行目)

 出力文字:ヅチパゲ

 一致文字数:3

 行数:594422行目

 実行時間:21.70秒


 3フ〇ーザ目(1060001~1590000行目)

 出力文字:ィ

 一致文字数:4

 行数:1120681行目

 実行時間:21.14秒


 総合計時間:67.53秒

(実際の合計時間は67.15秒であり、0.38秒ほど差異がある。おそらく時間を出力する際の処理時間か?)


 このマクロを基に、いよいよ一億回の演算を行うことにする。


 

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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