このコーナーでは、学習コンテンツ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);
}
お疲れ様でした。
ブレイクタイムフォトはこちらになります。
青山フラワーマーケット
参考文献です。