最近アルゴリズムの勉強も兼ねて競技プログラミング(AtCoder)をやるようになったのですが、
どうやら競技プログラミングをJavascript / Node.jsで解く人は少数派であり、各種コンテストサイトでの対応状況は芳しくないと思われます。
AtCoderの処理系はNode.js v5.12が利用されており(2019/4/14時点)、色々と使えない構文や関数が存在しています。
- let (strict modeにすれば使える)
- 分割代入
- べき乗演算子
- Array.prototype.includes()
- String.prototype.padStart()
- BigInt
- Object.entries / Object.values ... etc
そのため、手元のNode.jsのバージョンが高いと、「解けた!」と思っていざ提出すると通らないなんてことがあるので、nvm入れて切り替えてやっていたのですが、「Javascriptなんだからトランスパイルすれば良くね...?」と思ったので作りました。
babelとbabel-polyfillだけで十分かなと思っていたら、BigIntに関してはpolyfillでもダメだったので、BigInteger.js を入れました。(外部ライブラリ使って問題解くのはどうなんだ、という気もしますが...)
webpackで1枚のjsにバンドルしますので、例えばlodash入れたりとかもできてしまいます。
当然のことながらコードはビルド後の物を提出することになり、こんな感じ になってしまうので、この方式で提出する人が増えると、回答を見比べるとかそういった楽しみが無くなってしまうのが痛いです!
最新のNode.jsのバージョンに追従してくれればこんなことしなくていいのに(チラッ)
そのためにも、まずは少しでもJavascriptで問題を解く人が増えるといいなと思います!