このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。
paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
要素数がN個の配列a、M個の配列bを連結したN+M個の配列を出力します。
例として、2個の配列a=[1,2]と、3個の配列b=[3,4,5]を連結した、[1,2,3,4,5]を出力します。
まず、Pythonで解いてみます。
入力例
1行目 N,M
2行目 配列a
3行目 配列b
具体例
1行目 2,3
2行目 1,2
3行目 3,4,5
出力
1
2
3
4
5
解き方
手順として、
1.N,Mを読み込む
2.配列aを読み込む
3.配列bを読み込む
4.連結してループで出力する
コードを見てみましょう。
手順1:N,Mを読み込む
N,M=map(int,input().rstrip().split(‘ ‘))
手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))
手順3:配列bを読み込む
b=list(map(int,input().rstrip().split(‘ ‘)))
手順4:連結してループで出力する
for num in a+b:
print(num)
配列の連結はa+bで可能です。
Pythonでの全コードはこちらになります。
N,M=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))
b=list(map(int,input().rstrip().split(' ')))
for num in a+b:
print(num)
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
配列aの要素数N(2個)をB1、配列bの要素数M(3個)をB2に表示しました。
配列a=[1,2]は4行目、配列b=[1,2,3]は5行目です。
配列aと配列bの連結後(aにbを連結した[1,2,3,4,5])は8行目に出力します。
手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:配列aの要素数2を読み込む
3:配列bの要素数3を読み込む
4:配列a自体を読み込む
5:配列b自体を読み込む
6:配列aの後ろに配列bを連結させる
7.スプレッドシートに出力する
手順1,2,3:N,Mを読み込む
sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();
手順4,5:配列aとbを読み込む
let a=sheet.getRange(4,2,1,N).getValues();
let b=sheet.getRange(5,2,1,M).getValues();
手順6:配列aの後ろに配列bを結合させる
a[0]=a[0].concat(b[0]);
ログを使って確認
console.log(array);
手順8:スプレッドシートに出力する
sheet.getRange(8,2,1,a[0].length).setValues(a);
a[0].lengthとなっているのは、スプレッドシートは二次元配列だからです。
実行結果です。8行目の黄色いセルに入っています。
GASでの全コードはこちらになります。
function arrayJoin(){
//スプレッドシートを取得
sheet=SpreadsheetApp.getActiveSheet();
//配列aの要素数Nを取得
let N=sheet.getRange(1,2).getValue();
//配列bの要素数Mを取得
let M=sheet.getRange(2,2).getValue();
//配列aを取得
let a=sheet.getRange(4,2,1,N).getValues();
//配列bを取得
let b=sheet.getRange(5,2,1,M).getValues();
//ここで結合している!!
a[0]=a[0].concat(b[0]);
console.log(a);
sheet.getRange(8,2,1,a[0].length).setValues(a);
}
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
お台場 レインボーブリッジと自由の女神と小さいけれど東京タワー
参考文献です。