第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 を叩かないといけないので、美しくはないんでしょうね。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません