競技プログラミングのJavaScriptの標準入力がわかりにくかったのでまとめました。
大体以下のパターンかなと思います。
※随時追加していきます
標準入出力の基本形
プログラミング入門学習コンテンツのpaizaラーニングにはlinesで標準入力するやり方が説明されていますが、以下のやり方の方がわかりやすいと思います。
function main(input) {
const a = input.split(" "); // 入力
// コードを入れる
console.log(a); // 出力
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
inputの中に標準入力の値が入っています。
最後にconsole.log( )で出力するだけです。
1文字パターン
入力
a
入力例
17
入出力例
function main(input) {
const args = input.split("\n");
const n = parseInt(args, 10);
console.log(args); // ["17"]
console.log(n); // 17
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
連続文字パターン
入力
a b
入力例
3 4
入出力例
function main(input) {
const args = input.split('\n');
const nums = args[0].split(' ');
const a = parseInt(nums[0], 10);
const b = parseInt(nums[1], 10);
console.log(args); // [ '3 4', '' ]
console.log(nums); // [ '3', '4' ]
console.log(a); // 3
console.log(b); // 4
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));
連続文字パターン(〜n)
入力
n
A1 A2 ... An
入力例
4
2 1 4 8
入出力例
function main(input) {
const args = input.split("\n");
const n = parseInt(args[0], 10);
const a = args[1].split(" ").map((n) => parseInt(n, 10));
console.log(args); // [ '4', '2 1 4 8' ]
console.log(n); // 4
console.log(a); // [ 2, 1, 4, 8 ]
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
改行パターン
入力
A
B
C
X
入力例
5
1
0
20
入出力例
function main(input) {
const args = input.split("\n");
const A = parseInt(args[0], 10);
const B = parseInt(args[1], 10);
const C = parseInt(args[2], 10);
const X = parseInt(args[3], 10);
console.log(A); // 5
console.log(B); // 1
console.log(C); // 0
console.log(X); // 20
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
改行パターン(〜n)
入力
n
A1
A2
:
An
入力例
4
10
8
8
6
入出力例
function main(input) {
const args = input.split('\n');
const N = args[0];
const nums = args.slice(1, args.length - 1).map((n) => parseInt(n, 10));
console.log(args); // ["4", "10", "8", "8", "6"]
console.log(N); // 4
console.log(nums); // [10, 8, 8, 6]
}
main(require('fs').readFileSync('/dev/stdin', 'utf8'));
行列パターン
入力
X1 Y1
X2 Y2
X3 Y3
入力例
3 1
6 1
7 2
入出力例
function main(input) {
const args = input.split("\n");
const nums = args.map((n) => n.split(" "));
const x = nums.map((n) => parseInt(n[0], 10));
const y = nums.map((n) => parseInt(n[1], 10));
console.log(args); // [ '3 1', '6 1', '7 2' ]
console.log(nums); // [ [ '3', '1' ], [ '6', '1' ], [ '7', '2' ] ]
console.log(x); // [ 3, 6, 7 ]
console.log(y); // [ 1, 1, 2 ]
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
行列パターン(〜n)
入力
n
T1 X1 Y1
T2 X2 Y2
:
Tn Xn Yn
入力例
2
3 1 2
6 1 1
入出力例
function main(input) {
const args = input.split("\n");
const N = parseInt(args[0], 10);
const nums = args.slice(1, N + 1).map((n) => n.split(" "));
const t = nums.map((n) => parseInt(n[0], 10));
const x = nums.map((n) => parseInt(n[1], 10));
const y = nums.map((n) => parseInt(n[2], 10));
console.log(args); // [ '2', '3 1 2', '6 1 1' ]
console.log(N); // 2
console.log(nums); // [ [ '3', '1', '2' ], [ '6', '1', '1' ] ]
console.log(t); // [ 3, 6 ]
console.log(x); // [ 1, 1 ]
console.log(y); // [ 2, 1 ]
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));
行列パターン2(〜n)
入力
n x
V1 P1
:
Vn Pn
入力例
2 15
200 5
350 3
入出力例
function main(input) {
const args = input.split("\n").map((n) => n.split(" "));
const n = args[0][0];
const x = args[0][1];
const v = args.slice(1, n + 1).map((n) => parseInt(n[0], 10));
const p = args.slice(1, n + 1).map((n) => parseInt(n[1], 10));
console.log(args); // [ [ '2', '10' ], [ '200', '5' ], [ '350', '3' ] ]
console.log(n); // 2
console.log(x); // 15
console.log(v); // [ 200, 350 ]
console.log(p); // [ 5, 3 ]
}
main(require("fs").readFileSync("/dev/stdin", "utf8"));