第7回【JavaScript】未知数個の数の受け取り、未知数個の文字列の受け取り

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

はじめに

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

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

新しい知識を学ぶというのは面白いことだと思っています。しかし、あれもこれもと考えていると時間が全然足りません。AWS を主軸に、Python と JavaScript をしばらくは頑張ってみようと思っている次第です。

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

未知数個の数の受け取り (paizaランク D 相当)

長さがわからない数列 a が入力されます。
-1 が入力されるまで、受け取った数を改行区切りで出力してください。


入力される値

a_1 a_2 ... -1

・ 数列 a が 1 行で与えられます。

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


期待する出力

-1 が入力されるまで、受け取った数を改行区切りで出力してください。
出力の末尾には改行を入れてください。

a_1
a_2
...
-1

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


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

・ 0 ≦ a_i ≦ 100 (1 ≦ i ≦ N)


入力例

10 2 5 13 5 20 1 5 6 -1

出力例

10
2
5
13
5
20
1
5
6
-1

ループメニューが 1 から 2 になったので、for 文ではなく、while 文を使う、という流れだったと思う。

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 = lines[0].split(/\s/).map(Number);
  let idx = 0;
  while (true) {
      console.log(a[idx]);
      if (a[idx] == -1) break;
      idx++;
  }
});
Python
A = list(map(int,input().split()))
i = 0
while True:
    print(A[i])
    if A[i] == -1:
        break
    i += 1

未知数個の文字列の受け取り (paizaランク D 相当)

複数の文字列が入力されます。文字列の数はわかりません。
EOF が入力されるまで、受け取った文字列を改行区切りで出力してください。


入力される値

s_1 s_2 ... EOF

・ 複数の文字列が 1 行で与えられます。

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


期待する出力

EOF が入力されるまで、受け取った数を改行区切りで出力してください。

s_1
s_2
...
EOF

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


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

・ s_i は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列


入力例

paiza 813 8iza iza8 81za EOF

出力例

paiza
813
8iza
iza8
81za
EOF

期待する出力のところの文言がおかしいことには目を瞑って、やることはさっきと同じ。数字が文字列に変わっただけ、かな。

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 s = lines[0].split(/\s/);
  let idx = 0;
  while (true) {
      console.log(s[idx]);
      if (s[idx] == 'EOF') break;
      idx++;
  }
});
Python
S = list(input().split())
i = 0
while True:
    print(S[i])
    if S[i] == "EOF":
        break
    i += 1

最後に

最初に配列として格納すると、length なんかで個数が判明するので、for 文でも簡単に書けるよなぁ、とか考えながら書いていました。しかし、paiza の学習意図を汲み取って、きちんと while 文も学習します。

さて、JavaScript でも、while 文の使い方は基本的に変わらないようです。本問の場合は、-1 や EOF も出力するため、解答としてはこれが一番スマートだと思います。もちろん、条件として、!= -1 や != 'EOF’ もあるかとは思います。その場合、最後にもう 1 回 console.log を叩かないといけないので、美しくはないんでしょうね。

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

Python の第7回はこちら