このコーナーでは、学習コンテンツpaizaのレベルアップ問題集の中から気になった問題をPythonとGASの両方で解いてみます。
paizaでの回答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。
問題文URL:何番目にある? 3 (paizaランク D 相当)
まず、Pythonで解いてみます。
配列の中にNという数が左から何番目にあるのか調べます。
配列の要素数はMです。
それらが標準入力1行に与えられます。
要素数M個の配列をaとします。aが標準入力2行目に与えられます。
Nが配列aの左から何番目なのか調べます。
この問題の具体例は、
入力例1
3 5
1 2 3 4 5
出力例1
3
なので、N=3,M=5、配列aは1,2,3,4,5となります。
手順として、
1.NとMを読み込む
2.配列を読み込む
3.Nは配列aの左から何番目に登場するのか調べる
と、なります。
コードを見てみましょう。
手順1:調べる数Nと配列の要素数を読み込む
N,M=map(int,input().rstrip().split(‘ ‘))
手順2:配列aを読み込む
a=list(map(int,input().rstrip().split(‘ ‘)))
配列をきちんと読み込めたか出力して、確認後はコメントアウトしています。
#print(a)
手順3:Nは配列aの左から何番目に登場するのか調べる
print(a.index(N)+1)
配列名.index(順番を調べる要素)で、Nが左から何番目にあるのか求めています。
1を加えているのは、配列の先頭が0から始まるからです。
全コードはこのようになります。
N,M=map(int,input().rstrip().split(‘ ‘))
a=list(map(int,input().rstrip().split(‘ ‘)))
#print(a)
print(a.index(N)+1)
では、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。
配列の何番目なのか調べる数NをB1、配列の個数MをB2、配列をB4からF4までM個分=この場合5個
Nが配列aの何番目にあるのかをB6に表示させます。
手順はこのようになります。
1:配列の左から何番目にあるのか調べる数Nを読み込む
2:配列の要素数Mを読み込む
3:配列aを読み込む
4:Nが配列aの左から何番目に登場するのか求めて結果を表示する
手順1,2:N,Mを読み込む
const sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();
手順3:配列aを読み込む
let a=sheet.getRange(4,2,1,M).getValues();
B4から1行分、M列分取得しています。
console.log(a);
で、配列が読み込めたかどうかログに表示しました。
手順4:Nが配列aの左から何番目に登場するのか求めて結果を表示する
console.log(a[0].indexOf(N)+1);
sheet.getRange(6,2).setValue(a[0].indexOf(N)+1);
a[0]はスプレッドシート上で二次元配列となっていてその1行目であるa[0]の中で、
Nが左から何番目にあるのか求めて、配列の先頭が0で始まるので1を加えています。
そのログ表示とシートのB6に表示されるコードです。
全コードはこの様になります。
function inWhatNumber(){
const sheet=SpreadsheetApp.getActiveSheet();
let N=sheet.getRange(1,2).getValue();
let M=sheet.getRange(2,2).getValue();
let a=sheet.getRange(4,2,1,M).getValues();
console.log(a);
console.log(a[0].indexOf(N)+1);
sheet.getRange(6,2).setValue(a[0].indexOf(N)+1);
}
実行結果です。
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
スカイツリー
参考文献です。