Help us understand the problem. What is going on with this article?

AtCoderにJavaScriptで挑む方法

AtCoderにJavaScript(またはTypeScript)で挑むときに最低限押さえておいた方が良いと思われるポイントを紹介します。競プロ初心者の方が対象です。

その1: 提出言語にJavaScriptでなくTypeScriptを選択する

JavaScriptでコードを記述する場合でも、提出言語はTypeScriptを選択した方が良いです。
image.png

というのも、AtCoderのサポートするJavaScriptランタイムはNode.js v5.12のみであり、これはいまや使いものになりません(例えばアロー関数や分割代入が使えません1)。

TypeScriptもv2.1.6とそれほど新しいわけではありませんが、ES2015が問題なく利用できますし、AtCoderのTSはコンパイラオプションが緩いのでJSのコードがそのまま実行できます。

その2: ts-nodeとonline-judge-toolsを使ってローカルでコーディング/テストする

AtCoderはブラウザ上でコーディングやテストをすることが出来ますが、やはり慣れたエディタで作業したり、テストを効率良く行うためにはローカル環境が便利です。

ここではts-nodeonline-judge-toolsを使った簡単なローカル環境構築方法を紹介します。

Step1. ts-nodeをインストール

前述のとおり提出言語にTypeScriptを選択するので、ローカルでもTSの実行環境があったほうが安心です。
適当な作業用ディレクトリで以下のようにts-nodeをインストールします。

$ npm init -y
$ npm install typescript@2.1.6 ts-node @types/node

Step2. online-judge-tools をインストール

online-judge-toolsは、競技プログラミングを行う上で存在する典型作業を自動化するためのツールです。

色々な機能があるようですが、例えばAtCoderの問題ページにあるテストケース(入出力例)をCLIでダウンロードすることができます。

個人的にはAtCoderのためだけに余計なツールを導入したくなかったのですが、問題を読んだ後に手動でテストケースを用意するのはかなり気持ちの萎える作業ですので、このツールだけはインストールしておいた方が良いと思います。

こちらを参考にインストールを行ってください。

Step3. コーディングとテスト

対象となる問題のテストケースを online-judge-toolsでダウンロードします。

$ oj dl https://atcoder.jp/contests/abs/tasks/practice_1

好みのエディタで問題を解きます。

$ vi main.ts

ts-nodeとonline-judge-toolsでテストを行います(先ほどダウンロードしたテストケースを自動で読み込んでくれます)。

$ oj t -c 'sh -c "npx ts-node main.ts"'
[*] 1 cases found

[*] sample-1
[x] time: 1.705760 sec
[+] AC

[x] slowest: 1.705760 sec  (for sample-1)
[+] test success: 1 cases

テストがパスしたらAtCoderのサイトから提出を行いましょう(提出言語をTypeScriptにするのを忘れずに!)

さいごに

AtCoderではJSやTSはかなりマイナーな言語のようです。

言語仕様レベルの根深い問題もいくつかあるようなのですが、それ以前にNode.jsのバージョンを見てあきらめてしまう人も多いような気がしました(私自身がそうでした)。

この記事を見てAtCoderに挑戦するJSerが増えてくれたら嬉しいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした