JavaScriptによる標準入力

はじめに

PHPに比べてJavaScriptの標準入力のコードが複雑だったので頭の整理がてらまとめてみました。

(半ば競技プログラミングに取り組む際のコピペ用メモです。必要に応じて追記していくと思います。)

Paizaの動画を参考にしました。

https://paiza.jp/works/search_chapters/3003

1行の標準入力

どうやらJavaScriptではNode.jsを使う必要があるとのこと。

1行の標準入力:
process.stdin.resume(); 
process.stdin.setEncoding('utf8');
var input_string = ""; 
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  input_string = line;
});
reader.on('close', () => {
  console.log("hello " + input_string );
});
入力エリア
world
出力エリア
hello world
(補足コメント付き):
<--標準入力からデータを受け取るための記述-->
process.stdin.resume();
process.stdin.setEncoding('utf8');
<--後で渡される標準入力のデータを代入-->
var input_string = ""; 
<--requireでreadline機能実装。readlineで標準入力からデータ受取。-->
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
<--input_string変数(文字列)にline変数(標準入力から渡された1行のデータ)の値を代入-->
reader.on('line', (line) => {
  input_string = line;
});
<--受け取った値を使って何か処理を行う場合、closeの部分で記載。-->
reader.on('close', () => {
  console.log("hello " + input_string );
});

複数行の標準入力

複数行の標準入力:
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', () => {
  console.log("hello " + lines[0]);
  console.log("hello " + lines[1]);
  console.log("hello " + lines[2]);
});
入力エリア
world
multiple lines
JavaScript
出力エリア
hello world
hello multiple lines
hello JavaScript

配列を利用してデータを取得します。

標準入力の分割

複数行の標準入力:
process.stdin.resume(); 
process.stdin.setEncoding('utf8');
var input_string = ""; 
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  input_string = line;
});
reader.on('close', () => {
  const lines = input_string.split("\n");
  const line = lines[0].split(" ");
  console.log(Number(line[0])+Number(line[1]));
});
入力エリア
1 1
2 2
出力エリア
2

splitメソッドを利用して複数行の分割と文字列の分割をしています。

2+2で出力エリアを4にしたい際は、lines配列のインデックスを1にしてあげます。

おわりに

現状、PHPの方が楽だなと感じてますが、もう少しJavaScriptもトライしてみます。

関連リンク

Paiza スキルチェック見本問題(PHP編)まとめ ~ランクC相当~
https://chobimusic.com/paiza_skillcheck_c/

Paiza スキルチェック見本問題(PHP編)まとめ ~ランクD相当~
https://chobimusic.com/paiza_skillcheck_d/

コメントを残す