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

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

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

問題文URL:配列の要素の入れ替え (paizaランク D 相当)

配列arrayは、array=[1,2,3,4,5]で、この配列のA番目とB番目を入れ替えます。
Aが2、Bが3だとしたら入れ替え後の配列arrayは[1,3,2,4,5]になります。
また、配列の要素数はNで、この場合はN=5です。

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

入力例
1行目 A,B,N
2行目 配列array

具体例
1行目 2,3,5
2行目 1,2,3,4,5

出力
1,3,2,4,5

解き方1:方法1:tempを使って配列の要素を交換する

手順として、
1.A,B,Nを読み込む
2.配列aを読み込む
3.tempにarray[A-1]を代入する(配列は0番目スタート)
4.array[A-1]をarray[B-1]で置き換える
5.array[B-1]をtempで置き換える
6.ループで置き換え後のarrayを取り出す

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

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

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

手順3:tempにarray[A-1]を代入する
temp=array[A-1]

手順4:array[A-1]をarray[B-1]で置き換える
array[A-1]=array[B-1]

手順5:array[A-1]をarray[B-1]で置き換える
array[B-1]=temp

手順6:ループで置き換え後のarrayを取り出す
for num in array:
print(num)

ここまでのコードです。

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

temp=array[A-1]
array[A-1]=array[B-1]
array[B-1]=temp

for num in array:
  print(num)

もう一つの方法として、手順3から手順5のtempを使って要素入れ替えをたった1行で行える方法もあります。

array[A-1],array[B-1]=array[B-1],array[A-1]

赤枠の方法での全コードです。

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

#ポイント ここで入れ替えている
array[A-1],array[B-1]=array[B-1],array[A-1]

for num in array:
    print(num)

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

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

左からA番目(2番目)をB1、左からB番目(3番目)をB2、配列の要素数NをB3に表示しました。
配列arrayは5行目にあり、要素交換後は8行目に出力します。

手順はこのようになります。
1:スプレッドシートからアクティブシートをアクセスする
2:左からA番目(2番目)を読み込む
3:左からB番目(3番目)を読み込む
4:配列arrayの要素数Nを読み込む
5:配列arrayを読み込む
6:tempにarray[0][A-1]を代入する(スプレッドシートは2次元配列)
7.array[0][A-1]をarray[0][B-1]で置き換える
8.array[0][B-1]をtempで置き換える
9.ループで置き換え後のarrayを出力する

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

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

ログを使って確認
console.log(array);

手順6:tempにarray[0][A-1]を代入する(スプレッドシートは2次元配列)
let temp;
temp=array[0][A-1];

手順7.array[0][A-1]をarray[0][B-1]で置き換える
array[0][A-1]=array[0][B-1];

手順8.array[0][B-1]をtempで置き換える
array[0][B-1]=temp;

置き換え後の配列をログで確認
console.log(array);

手順9.ループで置き換え後のarrayを出力する
sheet.getRange(8,2,1,N).setValues(array);

実行結果です。8行目の黄色いセルに入っています。

GAS の全コードです。

function arraytemp(){

  const sheet=SpreadsheetApp.getActiveSheet();

  //配列のA番目(左から2番目)を取得
  let A=sheet.getRange(1,2).getValue();

  //配列のB番目(左から3番目)を取得
  let B=sheet.getRange(2,2).getValue();

  //配列の要素数Nを取得
  let N=sheet.getRange(3,2).getValue();

  //配列arrayを取得 (5,2)からN=5行
  let array=sheet.getRange(5,2,1,N).getValues();

  console.log(array);

  let temp;
  temp=array[0][A-1];
  array[0][A-1]=array[0][B-1];
  array[0][B-1]=temp;

  console.log(array);
  
  sheet.getRange(8,2,1,N).setValues(array);
  


}

お疲れ様でした。

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

青山フラワーマーケット

参考文献です。

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

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