2011/09/12

手動で解くDevQuiz Google Apps Script編

プログラマのプの字も見当たらないエントリです。





そもそも俺プログラマじゃねーしプログラムは初心者以下なので苦労しました。
というか、さっぱりわかりません。
まぁ、まずは問題を見てみましょう。

問題

ある都市(複数)における日別の供給電力と最大消費電力に関する記録が以下のような JSON の形式で与えられます。 この記録を Google SpreadSheets 上に展開してください。
[
  {
    "city_name": "Oykot",
    "data": [
      {
        "capacity": 1000,
        "usage": 750,
      },
      {
        "capacity": 1200,
        "usage": 1000,
      },
      ...
    ]
  },
  {
    "city_name": "Akaso",
    "data": [
      {
        "capacity": 1000,
        "usage": 800,
      },
      ...
    ]
  },
  ...
]


上の例では、最初のオブジェクトには Oykot という都市における記録が含まれています。1 日目には 1000W の供給能力があり、ピーク時に 750W が消費されました。


へー、電気ねぇ。

つかJSON?なにそれ的な感じ。


で、どうしろって?


以下の条件に従って、ひとつの Google Spreadsheets を作ってください。JSON 内の各都市ごとにシートを分けて生成していただくことになります。 条件は以下の通りです。
  • シートの名前は都市名にしてください。上の例では、最左のシートの名称は「Oykot」とします。
  • データは 1 行目の A 列目から順番に埋めます。ヘッダ(タイトル行)は付けないでください。
  • n 行目の A 列に n 日目の供給電力(capacity)を入れます。
  • n 行目の B 列に n 日目の消費電力(usage)を入れます。
  • n 行目の C 列に n 日目の電力の消費割合を入れます。上の例の 1 日目では 1000W の供給力のうち 750W が消費されたので、セル C1 の値は 75.00% とします。 同様にセル C2 の値は 83.33%(1000 / 1200 = 0.8333...)になります。 小数点以下の桁数は問いませんが、値の誤差が 0.01 以内となるようにしてください。 たとえば、75.00% を 75% としたり、83.33% を 83.33333% としても差し支えありませんが、 83.33% を丸めて 83% とはしないでください。


言いたいことはわかった。
が、さっぱりわからん。

ん?なんだヒントとかあるんじゃないか!

ヒント

Google Apps Script を使うと、Google Spreadsheets を操作する事ができます。 詳しくはhttp://code.google.com/intl/ja/googleapps/appsscript/guide.html をご覧ください。


サンプルコードはあるけど英語とかだし、
どうすりゃいいのかよく分からない。


詰んだか?と、思ったんですがよくよく見てみると、
データを配列に合わせて整形しているだけ。
整形できるということは法則性があると言うことに気づきました。

その瞬間


『これは手でいけるだろ』


ということで解法。
サンプルを使って説明します。



[
  {
    "city_name": "Oykot",
    "data": [
      {
        "capacity": 1000,
        "usage": 750,
      },
      {
        "capacity": 1200,
        "usage": 1000,
      },
      {
        "capacity": 800,
        "usage": 400,
      },
    ]
  },
  {
    "city_name": "Akaso",
    "data": [
      {
        "capacity": 1000,
        "usage": 790,
      },
    ]
  },
]




改行を消したり突っ込んだり、
文字を消したりすれば形は出来るし、
スプレッドシートは手で作ればいいしということで、


city_nameごとにデータを区切る。
dataの中身をリスト状にする。
スプレッドシートに手でちまちまと貼り付ける。

usageとcapacityを左右入れ替える。
%表示に書式を入れる。
シート名を変える。

#ざっくり端折ってごめん


最初は一つ一つ手で処理してたんだけど、
途中からテキストエディタ(今回は秀丸)で、

一気にやっちゃいました。
マクロ化してみた






きっと、こういうことをapps scriptでやれってことだったんでしょうけどねw

そんなわけで、非プログラマでもなんとかなるという一例でした。

次は神経衰弱?かも。

0 件のコメント:

コメントを投稿