第56回【JavaScript】末尾への要素の追加、指定位置への要素の追加

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

はじめに

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

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

LeoSaki(旦那)は超帯電体質です。そして、レオくんも超帯電猫です。1 人と 1 匹の間には、高確率で静電気が走ります。身体を撫でるときなんて、バチバチバチと音がするレベルです。慣れましたけれど。

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

末尾への要素の追加 (paizaランク D 相当)

配列 A と追加する要素 B が与えられるので、B を A の末尾に追加したのち、A の全ての要素を出力してください。


入力される値

N
A_1
...
A_N
B

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭の A_1 から順に与えられます。
・最後の行では、末尾に追加する値 B が与えられます。

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


期待する出力

A_1
...
A_{N+1}

配列 A に B を追加した後の A の全ての要素を以上の形式で出力してください。

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


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

・1 ≦ N ≦ 100
・0 ≦ A_i , B ≦ 100 (1 ≦ i ≦ N)


入力例

5
1
2
3
4
5
10

出力例

1
2
3
4
5
10

そのまま読み込んだら良さそうに見えるけれど、問題に書いてある通りのことをしてみよう。

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 B = lines[n+1];
  A.push(B);
  for (let i = 0; i < A.length; i++) {
      console.log(A[i]);
  }
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
B = int(input())
A.append(B)
print(*A,sep="\n")

指定位置への要素の追加 (paizaランク D 相当)

配列 A と追加する位置 n と追加する要素 B が与えられるので、B を A_n の後ろに追加した後の A を出力してください。


入力される値

N
A_1
...
A_N
n B

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭(A_1)から順に与えられます。
・最後の行では、数値を追加する要素番号 n と、追加する値 B が与えられます。

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


期待する出力

A_1
...
A_(N+1)

配列 A に B を追加した後の A の全ての要素を以上の形式で出力してください。

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


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

・1 ≦ N ≦ 100
・0 ≦ A_i , B ≦ 100 (1 ≦ i ≦ N)
・1 ≦ n ≦ N


入力例

5
1
2
3
4
5
3 10

出力例

1
2
3
10
4
5

insertBefore() とか splice() とか、結局何を使うのが正解なんだろう。

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(Number(lines[i]));
  }
  const [n,B] = lines[N+1].split(/\s/).map(Number);
  A.splice(n,0,B);
  for (let i = 0; i < A.length; i++) {
      console.log(A[i]);
  }
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
n,B = map(int,input().split())
A.insert(n,B)
print(*A,sep="\n")

最後に

問題にある通りに、大文字小文字の n を変数名として利用したのだけれど、分かりづらくなるなぁという印象。

const [n,B] = lines[n+1].split(/\s/).map(Number)

こう書いてしまっていて、ずっとエラーが消えず、立ち往生してしまった。

変数名にも気を遣うようにしようと思いました。

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

Python の第56回はこちら