入出力
すべての入力を読み込んでから適切にパースする
code: Input.js
class Input {
constructor() {
this.cursor = 0;
this.inputAll();
}
inputAll() {
this.data = (require("fs").readFileSync("/dev/stdin", "utf8")).split('\n');
return this.data;
}
/* 1行 or 複数行文字列 */
nextLine(n) {
if (n) {
const ret = this.data.slice(this.cursor, this.cursor + n);
this.cursor += n;
return ret;
}
}
/* 1整数 */
nextInt() { return parseInt(this.nextLine()); }
/* 一行文字配列 */
nextStrArr() { return this.nextLine().split(' '); }
/* 一行整数配列 */
nextIntArr() { return this.nextStrArr().map((e) => parseInt(e)); }
/* 一行浮動小数点配列 */
nextFloatArr() { return this.nextStrArr().map((e) => parseFloat(e)); }
/* 複数行整数配列 */
nextIntLine(n) { return this.nextLine(n).map((e) => parseInt(e)) }
/* 複数行浮動小数点配列 */
nextFloatLine(n) { return this.nextLine(n).map((e) => parseFloat(e)) }
/* 複数行文字列二次元配列 */
nextStrRange(n) { return this.nextLine(n).map((line) => line.split(' ')); }
/* 複数行整数二次元配列 */
nextIntRange(n) {
return this.nextLine(n).map((line) => line.split(' ').map((e) => parseInt(e)));
}
/* 複数行浮動小数点数二次元配列 */
nextFloatRange(n) {
return this.nextLine(n).map((line) => line.split(' ').map((e) => parseFloat(e)));
}
}
const input = new Input();
code: Out.js
class Out {
constructor() {
this.option = {
'true': 'Yes',
'false': 'No',
};
}
write(output){
let ret;
if (output == null) return;
if (output === true) { ret = this.option'true'; } else if (output === false) { ret = this.option'false'; } else { ret = output; }
console.log(ret);
}
bool(option) {
return this;
}
}
const out = new Out();
サンプル
code: sample.js
/*
w h
a_1_1 ... a_1_w
...
a_h_1 ... a_h_w
*/
const size = input.nextIntArr();
const nodes = input.nextIntRange(size1); Node6.0.0以降では分割代入が利用可能
code: sample.js
/*
w h
a_1_1 ... a_1_w
...
a_h_1 ... a_h_w
*/
const w,h = input.nextIntArr(); const nodes = input.nextIntRange(h);
Issue
Outputの複数パターン対応
AtCoderの言語アップデートとで分割代入に対応するまではあまりモチベがわかないやつ