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^=)

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

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^=)

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

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

このコーナーでは、学習コンテンツ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);
}

実行結果です。

お疲れ様でした。

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

スカイツリー

参考文献です。

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

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

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^=)

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