第58回【JavaScript】全ての要素を用いた処理、配列のサイズの変更

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

はじめに

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

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

久しぶりに AWS ネタ。相変わらず、どっぷり AWS に浸かっています。新しいサービスに目が行きがちですが、既存サービスもどんどん進化を遂げています。特に最近気になったのは、boto3 の resource が更新されなくなったり、ssm parameters の値をキャッシュ出来るようになったり、Lambda 関連のお話です。

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

全ての要素を用いた処理 (paizaランク D 相当)

配列 A の要素数 N と配列 A の各要素 A_1, A_2, …, A_N が与えられるので、A の要素の全てのペアについてのかけ算の結果を出力してください。


入力される値

N
A_1
...
A_N

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

A_2 * A_1
A_3 * A_1
A_3 * A_2
A_4 * A_1
A_4 * A_2
A_4 * A_3
...
A_N * A_{N-1}

全ての A の各要素のペアについてのかけ算の結果を以上のペアの順番で出力してください。

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


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

・2 ≦ N ≦ 100
・-100 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

5
1
2
3
4
5

出力例

2
3
6
4
8
12
5
10
15
20

やらなきゃならないことは単純ですが、期待する出力を見ると、ちょっと求められているものが違う模様。

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]);
  }
  for (let i = 1; i < n; i++) {
      for (let j = 0; j < i; j++) {
          console.log(A[i]*A[j]);
      }
  }
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
for i in range(N):
    for j in range(i):
        print(A[i] * A[j])

配列のサイズの変更 (paizaランク D 相当)

配列 A の要素数 N と新たに作成する配列のサイズ n , 配列 A の各要素 A_1 … A_N が与えられるので、配列 A の先頭から n 要素を順に保持する配列を作成してください。新たに作成する配列の要素数が A の要素数よりも大きい時は、サイズが合うように 0 を A の要素の末尾に追加してください。


入力される値

N n
A_1
...
A_N

・ 1 行目では、配列 A の要素数 N と新たに作成する配列の要素数 n が半角スペース区切りで与えられます。
・ 続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

B_1
...
B_n

配列 A を元に新たに作成した配列 B の各要素を先頭から順に改行区切りで出力して下さい。

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


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

・ 1 ≦ N ≦ 100
・ 1 ≦ n ≦ 100
・ -100 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

1 19
1

出力例

1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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,n] = lines[0].split(/\s/).map(Number);
  const A = [...Array(n)].map(()=>0);
  let cnt = 0;
  for (let i = 1; i <= Math.min(N,n); i++) {
      A[cnt] = Number(lines[i]);
      cnt++;
  }
  for (let i = 0; i < A.length; i++) {
      console.log(A[i]);
  }
});
Python
N,n = map(int,input().split())
A = [0] * n
for i in range(min(N,n)):
    A[i] = int(input())
for a in A:
    print(a)

最後に

スプレッド構文は、まだまだ慣れない。こういう書き方もあるのかぁ、くらいでいろいろ試してみていたら、とても便利なことに気が付きました。自由に使えるようになりたい。

いろいろ試してみていたら、あっという間に時間が過ぎていた。こういうの、面白いです。好きです。この面白さが分かる人は、きっと成長する、と信じてる。

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

Python の第58回はこちら