*当ブログではアフェリエイト広告を利用しています。

GAS

【GAS】GASで有名なFizzBuzzを解いてみた。実行速度も計測!

momeq
モー
モー

今回は、GAS(Google Apps Script)で有名なFizzBuzz問題をやって見たいと思います。

FizzBuzz問題とは・・・

英語圏で使われる有名な言葉遊び。
プログラミングでは、ループと条件分岐を使用するため、基本的な問題として使われる。1から順番に数字を数えていき、3の倍数で「Fizz」、5の倍数で「Buzz」、3と5の倍数のときに「FizzBuzz」に変えます。
(例)1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16,・・・
ニャー
ニャー

今回は、FizzBuzzを1万行やってみるにゃ。また、速度も測定して、1行ずつセル入力する場合と、配列で一括入力の場合を比べてみるにゃ。

この記事は・・・

  • 「FizzBuzz問題」を知りたい人
  • GASでループと条件分岐を使いたい人
  • 配列での一括入力の速度を知りたい人

にお勧めです。

【VBA】VBAでFizzBuzzをやってみる。配列の速さも検証。

実際のコード

一行ずつ実行するコード

function myFunction() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const startTime = new Date();
  for(let i = 1; i <= 10000; i++){
    if(i % 3 == 0 & i % 5 == 0){
      sheet.getRange(i, 1).setValue("FizzBuzz");
    }else if(i % 3 == 0){
      sheet.getRange(i, 1).setValue("Fizz");
    }else if(i % 5 == 0){
      sheet.getRange(i, 1).setValue("Buzz");
    }else{
      sheet.getRange(i, 1).setValue(i);
    }
  }
  const endTime = new Date();
  console.log((endTime - startTime) / 1000); 
}

>> 31.801
ニャー
ニャー

1万行だと大体30秒オーバーとかなりおそくなるんだにゃ。クラウド環境だから、セル入力に時間がかなりかかるのがわかるにゃ。

配列で一括入力のコード

function myFunction() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let ary = [];
  let ary2d = [];
  const startTime = new Date();
  for(let i = 1; i <= 10000; i++){
    if(i % 3 == 0 & i % 5 == 0){
      ary.push("FizzBuzz");
    }else if(i % 3 == 0){
      ary.push("Fizz");
    }else if(i % 5 == 0){
      ary.push("Buzz");
    }else{
      ary.push(i);
    }
  }
  for(let i = 0; i < 10000; i++){
    ary2d[i] = [ary[i]];
  }
  sheet.getRange("A1:A10000").setValues(ary2d);
  const endTime = new Date();
  console.log((endTime - startTime) / 1000); 
}
>> 0.354
モー
モー

0.35秒程度。一行ずつ実行するより100倍近い差が出ましたね。

配列で速度が速くなる理由

モー
モー

配列を使うと実行速度が速くなります。その理由は、セル入力回数が少ないことが理由です。

1万行のセル入力の場合
  • 一行ずつ実行 → 1万回の入力が必要
  • 配列で一括実行 → 1回の入力で終了
ニャー
ニャー

GASの場合、クラウド環境のため、VBAよりも顕著にセル入力の速度の影響が出るんだにゃ。

モー
モー

そうですね。スプレッドシートは、特に6分で強制終了になることを考えると、配列を使用するメリットは高そうです。

【VBA】VBAでFizzBuzzをやってみる。配列の速さも検証。

プログラミングを学ぶならTechAcademy(テックアカデミー)がおすすめ!

TechAcademy [テックアカデミー]

モー
モー

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。

TechAcademyのおすすめポイント
  • オンラインで選抜された現役エンジニアから学ぶことができる
  • 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
  • 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている
ニャー
ニャー

無料体験や相談もあるから、一度試してみてもいいんだにゃ!

\無料体験、無料相談はこちらから/



記事URLをコピーしました