第35回【JavaScript】配列の書き換え、2 変数の入れ替え、配列の要素の入れ替え

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

はじめに

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

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

面倒な勤怠システムが導入されて 1 年くらい経ちます。いろいろと手続きが面倒で、時間外や在宅をつけないことが増えています。完全にブラックな流れ。DX の名のもとに、より一層面倒にするとか、頭悪いなぁと素直に思います。インボイスと同じですね。

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

配列の書き換え (paizaランク D 相当)

1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、その数が A だった場合、B に書き換えてください。
書き換えた N 個の整数を改行区切りで出力してください。


入力される値

A B N
a_1 a_2 ... a_N

1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。

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


期待する出力

N 個の整数の内、その数が A だった場合、B に書き換えてください。
書き換えた N 個の整数を改行区切りで出力してください。

a_1
a_2
...
a_N

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


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

・A, B, N は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

3 1 5
1 2 3 4 5

出力例

1
2
1
4
5

実際の作業でよくあるパターン的な、配列の書き換えです。

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 [a,b,n] = lines[0].split(/\s/).map(Number);
  const l = lines[1].split(/\s/).map(Number);
  for (let i = 0; i < n; i++) {
      if (l[i] == a) l[i] = b;
  }
  for (let i = 0; i < n; i++) {
      console.log(l[i]);
  }
});
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
for i,val in enumerate(L):
    if val == A:
        L[i] = B
print(*L,sep="\n")

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

整数 A, B が与えられます。
A と B の値を入れ替えて、半角スペース区切りで出力してください。


入力される値

A B

整数 A, B が与えられます。

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


期待する出力

A と B の値を入れ替えて、半角スペース区切りで出力してください。

B A

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


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

・A, B は 1 以上 10 以下の整数


入力例

2 1

出力例

1 2

JavaScript でも、ワンライナーで出来るらしい。

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 [a,b] = lines[0].split(/\s/).map(Number);
  [a,b] = [b,a];
  console.log(a,b);
});
Python
A,B = map(int,input().split())
A,B = B,A
print(A,B)

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

1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の左から A 番目の数と B 番目の数の値を入れ替えて、改行区切りで出力してください。
なお、左端を 1 番目とします。


入力される値

A B N
a_1 a_2 ... a_N

1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。

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


期待する出力

N 個の整数の左から A 番目の数と B 番目の数の値を入れ替えて、改行区切りで出力してください。

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


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

・N は 1 以上 10 以下の整数
・A, B は 1 以上 N 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

2 3 5
1 2 3 4 5

出力例

1
3
2
4
5

前問でワンライナーで出来ることを覚えたので、簡単です。

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 [a,b,n] = lines[0].split(/\s/).map(Number);
  let l = lines[1].split(/\s/).map(Number);
  [l[a-1],l[b-1]] = [l[b-1],l[a-1]];
  for (let i = 0; i < n; i++) {
      console.log(l[i]);
  }
});
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
L[A-1],L[B-1] = L[B-1],L[A-1]
print(*L,sep="\n")

最後に

Python でスワップが簡単に書くことが出来ることに感動した。JavaScript でも同じような書き方が出来るなんて。素敵すぎる。やるじゃん。

配列でないとダメらしいので、そこだけは注意する必要がありそうです。あと、インデックスが 0 から始まること。さすがに身に沁みついているけれど、やっぱり書いておくべきだと思うので。

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

Python の第35回はこちら