第55回【JavaScript】変数の入れ替え、指定要素の入れ替え

2023年12月14日

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 55 回目です。

今回は 55 回目だから、と数字にまつわる何かを思いつくままに書こうとすると、Python の学習のときに書いたことと被ることが多い。55 だから松井秀喜は安直すぎますね。というか、LeoSaki(旦那)の頭の中には基本的に巨人の選手の背番号しか入っていないらしい。

それでは、今日も頑張ってみようと思います。

変数の入れ替え (paizaランク D 相当)

整数型の変数を 2 つ宣言して整数 X, Y を格納したのち、2 つの変数の中身を入れ替えた後の 2 つの変数の値を出力してください。


入力される値

X Y

・1 行で、整数 X, Y が半角スペース区切りで入力されます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

Y X

2 つの変数の中身を入れ替えた後の 2 つの変数の値を出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・0 ≦ X, Y ≦ 100


入力例

1 2

出力例

2 1

JavaScrip でも、スワップは簡単に出来てしまうらしい。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  let [X,Y] = lines[0].split(/\s/);
  [X,Y] = [Y,X];
  console.log(X,Y);
});
Python
X,Y = map(int,input().split())
X,Y = Y,X
print(X,Y)

指定要素の入れ替え (paizaランク D 相当)

配列 A の要素数 N と配列 A の各要素 A_1, A_2, …, A_N , 交換する A の要素番号 X, Y が与えられるので、A_X と A_Y を入れ替えた後の A を出力してください。


入力される値

N
A_1
...
A_N
X Y

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭の A_1 から順に与えられます。
・最後の 1 行で、X, Y が半角スペース区切りで与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A_1
...
A_N

A_X と A_Y を入れ替えた後の A の各要素を以上の形式で出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ 2 ≦ N ≦ 100
・ 1 ≦ X , Y ≦ N , X != Y
・ 0 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

5
1
2
3
4
5
3 5

出力例

1
2
5
4
3

インデックスがゼロから始まる点だけ間違わなければ大丈夫っぽい。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  const A = [];
  for (let i = 1; i <= n; i++) {
      A.push(lines[i]);
  }
  const [X,Y] = lines[n+1].split(/\s/);
  [A[X-1],A[Y-1]] = [A[Y-1],A[X-1]];
  for (let i = 0; i < n; i++) {
      console.log(A[i]);
  }
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
X,Y = map(int,input().split())
A[X-1],A[Y-1] = A[Y-1],A[X-1]
print(*A,sep="\n")

最後に

よくある古典な一次変数を用意するパターン

temp = A
A = B
B = temp

これをしなくてもスワップ出来るんだぁ、と素直に感動しました。

PHP で古典なスワップを書いた記憶があるけれど、調べてみたら、list を利用したワンライナーでも OK なのだとか。調べれば調べるほど深みにはまっていく。

引き続き、よろしくお願いいたします!

Python の第55回はこちら