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

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

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

問題文URL:配列に含まれている? 3 (paizaランク D 相当)

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

標準入力の1行目は配列の要素数がNで、調べる数がM、
標準入力の2行目は配列自体が入力されます。
配列をaとします。Mがaの中にあったら’Yes’,無かったら’No’と表示します。
この問題の具体例は、

入力例1
5 1
1 2 3 4 5

出力例1
Yes

なので、N=5,M=1、配列aは1,2,3,4,5となります。

手順として、
1.NとMを読み込む
2.配列を読み込む
3.配列aの中にMが入っているかどうか調べる

になります。

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

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

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

手順3:配列aの中にMがあるかどうか調べます。
if M in a:
print(‘Yes’)
else:
print(‘No’)

全コードはこのようになります。

N,M=map(int,input().rstrip().split(‘ ‘))
a=list(map(int,input().rstrip().split(‘ ‘)))
if M in a:
 print(‘Yes’)
else:
 print(‘No’)

N,M=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))
if M in a:
 print('Yes')
else:
 print('No')

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

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

配列の個数NをB1、調べる数MをB2、配列をB4からF4までN個分=この場合5個
Mが配列aにあるかどうかの判定結果をB6に表示させます。

手順はこのようになります。
1:要素数Nを読み込む
2:調べる数Mを読み込む
3:判定結果jadgeを「No」にしておく
4:配列aを読み込む
5:配列aにMがあるかどうか調べる
6.判定結果を表示する。

手順1,2
sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();

手順3
let jadge=’No’;
まずはjadgeというフラグを「No」にして、Mがaの中に存在したら「Yes」で書き換えます。

手順4
let a=sheet.getRange(4,2,1,N).getValues();
配列を読み込んでいます。
B4は(4,2)で表され、行は1、列はN個分確保します。

手順5
配列の先頭は0から始まり、N=5の場合、0,1,2,3,4で5より小さい間のループを作ります。
スプレッドシートの配列は二次元配列なので、1行目はa[0][1]からa[0][4]までです。
もしもa[0][i]がMと一致したら、フラグjadgeを「Yes」に書き換えてループを抜けます。



for(let i=0;i<N;i++){
if(a[0][i]==M){
jadge=’Yes’
break;

手順6
最後に判定結果をセルB6に入れます。
sheet.getRange(6,2).setValue(jadge);

全コードはこの様になります。

function myFunction() {
sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();
let jadge=’No’;
let a=sheet.getRange(4,2,1,N).getValues();
for(let i=0;i<N;i++){
if(a[0][i]==M){
jadge=’Yes’
break;
}
}
sheet.getRange(6,2).setValue(jadge);
}

お疲れ様でした。

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

2019年東京都板橋区 いたばし花火大会

参考文献です。

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

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