GASとPythonで、paiza レベルアップ問題集 配列メニュー を解いてみた6

このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。

paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

問題文URL:部分配列 (paizaランク D 相当)

配列arrayは、array=[1,2,3,4,5]で、この配列のA番目からB番目までの部分配列を作ります。
Aが2、Bが4だとしたら、部分配列は[2,3,4]になります。
また、配列の要素数はNで、この場合はN=5です。

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

入力例
1行目 A,B,N
2行目 配列array

具体例
1行目 2,4,5
2行目 1,2,3,4,5

出力
2
3
4

解き方

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.ループの中でスライスを使って部分配列を出力する

コードを見てみましょう。

手順1:A,B,Nを読み込む
A,B,N=map(int,input().rstrip().split(‘ ‘))

手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))

手順3:ループの中でスライスを使って部分配列を出力する
for num in array[A-1:B]:
 print(num)

スライスを使っている部分は、A=2番目はインデックス1、B=4番目はインデックス3になります。
なので、array[1:4]とすると、array[1]、array[2]、array[3]が出力されます。
[1:4]の4とすると、4より小さい3までの処理になります。
A=2、B=4を[1:4]にするには、array[A-1:B]です。

Pythonの全コードです。

#A番目、B番目、配列の要素数Nを読み込む
A,B,N=map(int,input().rstrip().split(' '))

#配列arrayを読み込む
array=list(map(int,input().rstrip().split(' ')))

#部分文字列をスライスを使って表示する
for num in array[A-1:B]:
    print(num)

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

左からA番目(2番目)をB1、左からB番目(4番目)をB2、配列の要素数N=5をB3に表示しました。
配列arrayは5行目にあり、要素交換後は8行目に出力します。

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:左からA番目(2番目)を読み込む
3:左からB番目(4番目)を読み込む
4:配列arrayの要素数N=5を読み込む
5:配列array自体を読み込む
6:arrayの部分配列用のarray2を用意する
7.スライスを使ってarray2に部分配列を格納する
8.スプレッドシートに出力する

手順1,2,3,4:A,B,Nを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let A=sheet.getRange(1,2).getValue();
let B=sheet.getRange(2,2).getValue();
let N=sheet.getRange(3,2).getValue();

手順5:配列aを読み込む
let a=sheet.getRange(5,2,1,N).getValues();

ログを使って確認
console.log(array);

手順6:arrayの部分配列用のarray2を用意する
let array2=[];

手順7:スライスを使ってarray2に部分配列を格納する
array2[0]=array[0].slice(A-1,B);

array2をログで確認
console.log(array);

手順8:スプレッドシートに出力する
sheet.getRange(8,2,1,array2[0].length).setValues(array2);

実行結果です。8行目の黄色いセルに入っています。

GASの全コードです。

function arraySlice(){

//シートを取得
sheet=SpreadsheetApp.getActiveSheet();

//配列のA番目(左から2番目)を取得
let A=sheet.getRange(1,2).getValue();

//配列のB番目(左から4番目)を取得
let B=sheet.getRange(2,2).getValue();

//配列の要素数Nを取得
let N=sheet.getRange(3,2).getValue();

//配列arrayを取得
let array=sheet.getRange(5,2,1,N).getValues();

console.log(array);

//部分配列をarray2に入れる
let array2=[];

//スライスを使ってarray2に部分配列を格納する
array2[0]=array[0].slice(A-1,B);

console.log(array2);

//スプレッドシートに出力する
sheet.getRange(8,2,1,array2[0].length).setValues(array2);


}

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

スカイツリーと河津桜

参考文献です。

GAS自作サンプル集に戻る
Python自作サンプル集に戻る
息抜きに、写真で癒し(=^x^=)

基本情報技術者試験
自己紹介

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。