【paiza レベルアップ問題集】 「STEINS;GATE FINAL 正則表現のエントリーポイント」をPythonとGASで解いてみた

この記事を読むことで、

・Pythonの標準入力で文字列を取得する方法

・GASでは二次元配列として文字列を取得する方法

・Python・GASで文字列を連結して出力する方法

についての概要が掴めます。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

正則表現のエントリーポイント (paizaランク D 相当)

問題:
あなたはプログラミングの課題を解いています。
2 つの単語が改行区切りで入力されるので「;」区切りで出力してください。

この記事では、下記の入力例1の場合を例にして、標準入力で2つの単語を取得して「;」を用いて文字列の連結をして出力します。

入力例1
STEINS
GATE

出力例1
STEINS;GATE

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

下準備として、paiza.ioにこの様に入力します。
(入力例1をそのままioにコピーしただけです。)

手順として、

1:標準入力で最初の単語a(今回はSTEINS)を読み込む

2:標準入力で最初の単語b (GATE)を読み込む


3:「;」を使って2つの文字列を連結して出力する

で、行います。

この手順で作成したプログラムを実行した出力結果です。

コードはこちらになります。

#標準入力で最初の文字と次の文字を読み込む
a=input()
b=input()

#「;」を用いて文字を連結して出力する
print(a+';'+b)

Pythonでの解き方は以上になります。


では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に入力しました。

スプレッドシートの緑のセルに最初の文字「STEINS」を入力しました。
スプレッドシートの灰色のセルに次の文字「GATE」を入力しました。

上記のセル2つはarrayという二次元配列として一度に取得します。そうすることによって、SpreadSheetAppから階層を辿って現在のシートにアクセスするという手間を減らすことが出来ます。

黄色いセルには、二次元配列arrayから2つの文字列を取得し「;」で連結した文字列を出力します。

※スプレッドシートに表示するには、二次元配列に文字列を追加をしております※

手順はこのようになります。

1:スプレッドシートからアクティブシートにアクセスする

2:スプレッドシートの緑のセルに入力された「STEINS」と、灰色のセルに入力された「GATE」の部分を二次元配列arrayとして取得する


3:二次元配列arrayが無事取得出来たことをログで出力して確認する

4:二次元配列array[0][0]とarray[1][0]を「;」も用いて連結して定数strに代入する

5:文字列の連結が出来たことをstrをログ出力して確認する

6:スプレッドシートに二次元配列として取得する配列str2を宣言する

7:str2が二次元配列になるようにstrを追加する

8:str2をスプレッドシートに出力する前にログ出力して確認する

9:スプレッドシートの黄色い所に二次元配列str2を出力する

少々長くなってしまって恐縮ですが、それでは手順ごとにコードを掲載致します。

手順1: スプレッドシートからアクティブシートにアクセスする

const ss=SpreadsheetApp.getActiveSheet();

function steinsGate() {

  //現在のスプレッドシートに階層を辿ってアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

関数steinsGateの中に、まずはSpreadsheetAppから階層を辿ってアクティブシートにアクセスして定数ssに代入しています。

手順2:2つの文字列を二次元配列として取得

const array=ss.getRange(1,1,2).getValues();

セルA1から2行分1列分の二次元配列として取得しています。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();

  //2つの文字列を二次元配列として取得
  const array=ss.getRange(1,1,2).getValues();

}

手順3:取得した二次元配列をログ出力で確認する
2行1列の二次元配列として取得出来たことをログで出力して確認します。

console.log(array);

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();

  //取得した二次元配列をログ出力で確認する
  console.log(array);

}

手順4:文字列を連結させる

const str=array[0][0]+”;”+array[1][0];

文字列は二次元配列で、最初の行の0番目のarray[0][0]と、次の行の0番目のarray[1][0]を「;」で文字列を連結させて定数strに代入しています。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  //文字列を連結させる
  const str=array[0][0]+";"+array[1][0];
}

手順5:文字列の連結をログ出力で確認する

console.log(str);

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const str=array[0][0]+";"+array[1][0];
  
  //文字列の連結をログ出力で確認する
  console.log(str);

}

手順6:連結させた文字列を二次元配列として格納させる配列str2を宣言

let str2=[];

スプレッドシートは縦横の二次元配列なので、それに対応した、新たに出力用の配列を作成します。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  //連結させた文字列を二次元配列として格納させる配列str2を宣言
  let str2=[];
 
}

手順7:str2が二次元配列になる様に、strを追加する

str2.push([str]);

配列に追加するpushメソッドを使う際、[str]を入れることで二次元配列にしてスプレッドシートに出力出来る準備をするので、[ ]を必ず入力します。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];

  //str2が二次元配列になる様に、strを追加する
  str2.push([str]);

}

手順7:スプレッドシートに出力する前に確認する

console.log(str2);

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];
  str2.push([str]);

  //スプレッドシートに出力する前に確認する
  console.log(str2);

}

二次元配列になっていますね。
これでスプレッドシートに出力する準備が整いました。

手順8:スプレッドシートの黄色いセルA4に連結した文字列を出力する

ss.getRange(4,1).setValue(str2);

セルA4は4行1列ですので、(4,1)と書き表せます。

function steinsGate() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const str=array[0][0]+";"+array[1][0];
  console.log(str);

  let str2=[];
  str2.push([str]);
  console.log(str2);

  //スプレッドシートの黄色いセルに連結した文字列を出力する
  ss.getRange(4,1).setValue(str2);

}

実行後のスプレッドシートです。


お疲れ様でした。ブレイクタイムPhotoは、

お台場自由の女神とレインボーブリッジと、レインボーブリッジの右端から1cmの所の東京タワーです。

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集_PythonとGASのコード紹介トップに戻る
初めてのGASに戻る


自己紹介

モバイルバージョンを終了