LoginSignup
18
20

More than 5 years have passed since last update.

JavaScript(node.js)で競技プログラミングするためのテンプレ書いた

Last updated at Posted at 2013-04-28

AOJでjavaScript(node.js)が使えることに気づいたので早速やってみたのですが、非同期I/Oでプロコンするのはなかなか斬新な体験だった(皮肉です)ので、後世のために残しておきます。
入力が馬鹿みたいにでかかったり変則的な形式を取る問題の場合、これじゃ対処できないです。でも、そもそもNode.jsで競技プログラミングしようっていう発想が間違ってるので、そういうときは諦めてRubyとかPython使ってください。自分で入力を処理しようとすると多分詰みます。

procon-template.js
function main() {
  //ここで問題を解く
  //`input` に入力が改行で区切られた配列として入ってくるので頑張って
}

var
input = '';

process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
  input += chunk;
});
process.stdin.on('end', function() {
  input = input.split('\n');
  main();
});

多分、入力の無い問題を上記のコードをベースにして解いたらコケると思いますがそこはさすがに判断してください。

その2

procon-template2.js
var fs = require('fs'),
    length = fs.fstatSync(process.stdin.fd).size,
    buffer = new Buffer(length),
    bytesRead = fs.readSync(process.stdin.fd, buffer, 0, length, 0),
    input = buffer.toString('utf8', 0, bytesRead).split('\n');
main();
function main(){
// do something
}

こっちは入力の有無は関係なしです。
その分、パイプラインで流し込む必要がありますが。

なんで会津大学はよりによってnode.jsを選んだんだよ…。

ちなみに僕はnode.jsで AOJ 109 Smart Caluculator を解いたのですが、それはそれで非常に罠がありました。そっちのコードは gist に貼っておいたので興味ある人は覗いてみてください。

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20