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

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

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

問題文URL:【配列の書き換え (paizaランク D 相当)】

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

N個の配列の中にAという要素があったら、それをBに置き換える問題です。
A,B,Nは標準入力1行目に与えられます。

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

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

この問題の具体例は、

入力例1
3 1 5
1 2 3 4 5

出力例1
1
2
1
4
5

入力例1行目の標準入力1行目より、探す要素A=3、置換する要素はB=1,配列の要素数N=5となります。
入力例2行目の標準入力より、配列aは1,2,3,4,5となります。

出力例より、置換後の配列aは1,2,1,4,5となり、3が1に置換されます。

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.ループで配列aの各要素を調べる
4.IF文でもしもa[i]がAだったら、a[i]をBに置き換える
5.置換後の配列aを出力する
と、なります。

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

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

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

手順3:ループで配列aの各要素を調べる
手順4:IF文でもしもa[i]がAだったら、a[i]をBに置き換える

for i in range(N):
    if a[i]==A:
        a[i]=B

手順5:置換後の配列aを出力する

for num in a:
    print(num)

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


'''
N個の配列aのうち、
要素がAのものをBに書き換える 

A B N
a_1 a_2 ... a_N

'''

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

for i in range(N):
    if a[i]==A:
        a[i]=B

for num in a:
    print(num)

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

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

置換前の要素AをB1、置換後の要素BをB2、配列の要素数NをB3に表示しました。
置換前の配列aをB5からF5、置換後の配列aをB7からF7に表示しました。

手順はこのようになります。
1:置換前の要素Aを読み込む
2:置換後の要素Bを読み込む
3:配列aの要素数Nを読み込む
4:配列aを読み込む
5:ループとIF文で要素AをBに置き換える
6:置換後の配列aを出力する

手順1,2,3: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();

ログを使ってA,B,Nが読み込めたことを確認
console.log(A);
console.log(B);
console.log(N);

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

ログを使って配列aが読み込めたことを確認
console.log(a);

手順5:ループとIF文で要素AをBに置き換える

  for(let i=0;i<N;i++){
    if(a[0][i]==A){
      a[0][i]=B
    }
  }

a[0][i]となっているのは、スプレッドシート上で二次元配列として扱っているので、配列aの0行目のi列目をループで回してIFで調べています。

ログで配列Aが書き換えられたことを確認
console.log(a)

手順6:置換後の配列aを出力する
sheet.getRange(7,2,1,N).setValues(a);

実行結果です。

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


function arrayReplacement(){
  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();

  console.log(A);
  console.log(B);
  console.log(N);

  let a=sheet.getRange(5,2,1,N).getValues();
  console.log(a);

  for(let i=0;i<N;i++){
    if(a[0][i]==A){
      a[0][i]=B
    }
  }

  console.log(a)

  sheet.getRange(7,2,1,N).setValues(a);

}

お疲れ様でした。

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

横浜ランドマークタワーから撮った、みなとみらいの夜景

参考文献です。

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

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

投稿者: nekosiestr

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