第39回【JavaScript】要素の削除、要素の挿入

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

はじめに

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

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

相変わらずメールの量が多いです。仕事でもプライベートでも。すべてのメールに目を通せてはいないので、たまに見落としてえらいこっちゃになります。仕事はともかく、プライベートはメール量を減らしたいのですが。

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

要素の削除 (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
左から M 番目の要素を削除し、削除した後の N – 1 個の要素を改行区切りで出力してください。
なお、左端を 1 番目とします。


入力される値

N M
a_1 a_2 ... a_N

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

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


期待する出力

左から M 番目の要素を削除し、削除した後の N – 1 個の要素を改行区切りで出力してください。

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


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

・N は 2 以上 10 以下の整数
・M は 1 以上 N 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

5 3
1 2 3 4 5

出力例

1
2
4
5

左端は 0 番目でなく、1 番目。

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,m] = lines[0].split(/\s/).map(Number);
  let a  = lines[1].split(/\s/).map(Number);
  a.splice(m-1,1);
  for (let i = 0; i < a.length; i++) {
      console.log(a[i]);
  }
});
Python
N,M = map(int,input().split())
A = list(map(int,input().split()))
del A[M-1]
for a in A:
    print(a)

要素の挿入 (paizaランク D 相当)

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


入力される値

N M K
a_1 a_2 ... a_N

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

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


期待する出力

左から M 番目に K を挿入し、挿入した後の N + 1 個の整数を改行区切りで出力してください。

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


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

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


入力例

5 3 10
1 2 3 4 5

出力例

1
2
10
3
4
5

splice() はちょっと慣れない。指定したインデックスの「手前」に値を追加する、らしい。でも、インデックスは 0 から始まる。

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,m,k] = lines[0].split(/\s/).map(Number);
  let a = lines[1].split(/\s/).map(Number);
  a.splice(m-1,0,k);
  for (let i = 0; i < a.length; i++) {
      console.log(a[i]);
  }
});
Python
N,M,K = map(int,input().split())
A = list(map(int,input().split()))
A.insert(M-1,K)
for a in A:
    print(a)

最後に

前方を削除、追加、後方を削除、追加、など、JavaScript にはそれぞれにメソッドがあるようだが、今回は splice() のみで解答出来る内容だった。しかし、使い方は慣れないなぁ。

なんで splice() なんだろう。接合とかより継ぎとか重ね継ぎとか、なんか意味が違うような気もするのだけれど。いつも splice() がぱっと出てこなくて困っています。

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

Python の第39回はこちら