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

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

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

問題文URL:【配列の検索】何個ある? Boss (paizaランク D 相当)

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

配列の中にNという数が何個あるのか調べます。
配列の要素数はMです。
それらが標準入力1行に与えられます。

要素数M個の配列をaが、標準入力2行目に与えられます。

Nが配列aの中に何個あるのか調べます。

この問題の具体例は、

入力例1
1 5
1 1 1 2 2

出力例1
3

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

手順として、
1.NとMを読み込む
2.配列aを読み込む
3.Nは配列aの中に何回登場するのかを求める。

と、なります。

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

手順1:調べる数Nと配列の要素数を読み込む
N,M=map(int,input().rstrip().split(‘ ‘))

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

手順3:Nは配列aの中に何回登場するのか調べる
print(a.count(N))

配列名.count(登場回数を調べる要素)で、Nは配列aに何回登場するのかを求めています。

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

N,M=map(int,input().rstrip().split(' '))
a=list(map(int,input().rstrip().split(' ')))

print(a.count(N))

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

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

配列の何番目なのか調べる数NをB1、配列の個数MをB2、配列をB4からF4までM個分=この場合5個
Nが配列aの何番目にあるのかをB6に表示させます。

手順はこのようになります。
1:配列の左から何番目にあるのか調べる数Nを読み込む
2:配列の要素数Mを読み込む
3:配列aを読み込む
4:Nが配列aの左から何番目に登場するのか求めて結果を表示する
5:Nの登場回数をシートのB6に出力する

手順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(N);
console.log(M);
console.log(a)

で、N,Mと配列aがきちんと読み込めたかどうか確認するために、ログに表示しました。

手順4:Nが配列aの中に何回登場するのか求めて結果を表示する
Nの出現回数を数える変数をNcountとします。
二次元配列a[0][0]からa[0][4]までNと同じかどうか調べています。
同じの場合はNcountをインクリメントしています。

let Ncount=0;
  for (let i=0;i<M;i++){
    if (a[0][i]===N){
      Ncount++
    }
  }
  console.log(Ncount);

ログです。

手順5:Nの登場回数をシートのB6に出力する
sheet.getRange(6,2).setValue(Ncount);

実行結果です。

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

function whatCount(){
  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(N);
  console.log(M);
  console.log(a)

  let Ncount=0;
  for (let i=0;i<M;i++){
    if (a[0][i]===N){
      Ncount++
    }
  }
  console.log(Ncount);
  sheet.getRange(6,2).setValue(Ncount);

}

お疲れ様でした。

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

お台場 自由の女神

参考文献です。

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

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

投稿者: nekosiestr

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